2014-11-03 41 views
0

渐渐空虚名单上有以下属性类别:通过转换特性为列表

public class Ctas 
    { 
     private string _CodAgrup; 
     public string CodAgrup 
     { 
      get { return _CodAgrup; } 
      set { _CodAgrup = value; } 
     } 
     private string _NumCta; 

     public string NumCta 
     { 
      get { return _NumCta; } 
      set { _NumCta = value; } 
     } 

     private string _Desc; 
     public string Desc 
     { 
      get { return _Desc; } 
      set { _Desc = value; } 
     } 

     private string _subctade; 
     public string SubCtaDe 
     { 
      get { return _subctade; } 
      set { _subctade = value; } 
     } 

     private string _Nivel; 
     public string Nivel 
     { 
      get { return _Nivel; } 
      set { _Nivel = value; } 
     } 
     private string _Natur; 
     public string Natur 
     { 
      get { return _Natur; } 
      set { _Natur = value; } 
     } 

     public override string ToString() 
     { 
      return "CodAgrup = " + CodAgrup + ", NumCta = " + NumCta + ", Desc = " + Desc + ", SubCtaDe = " + SubCtaDe + ", Nivel = " + Nivel + ", Natur = " + Natur; 
     } 
    #endregion 
    } 

,我必须创建这些属性的XML,所以首先我必须填写的属性,然后我得到了下一个方法我想用来填充属性,第一个问题是,它正确的方式我用填充属性?

那我应该retreive的数据,并把它写在一个XML文件,所以我转换属性的数据到一个列表,然后把它们写成atributes但是当我调试,我得到该列表是空的,这是为什么?什么可能是最好的办法呢?

//Insert n data on properties 
static void cuenta(string codagroup, string numcta, string desc, string subctade, string nivel, string natur) 
     { 
      Ctas cuentas = new Ctas(); 
      int x = 0; 
      while (cuentas.CodAgrup != null) 
      { 
       cuentas.CodAgrup.Insert(x, "codagroup"); 
       cuentas.NumCta.Insert(x, "numcta"); 
       cuentas.Desc.Insert(x, "desc"); 
       cuentas.SubCtaDe.Insert(x,"subctade"); 
       cuentas.Nivel.Insert(x, "nivel"); 
       cuentas.Natur.Insert(x, "natur"); 
       x = x + 1; 
      } 
     } 

//Converting propierties data into list 
List<string> coda = cuentas.CodAgrup.GetType().GetProperties().Select(p => p.Name).ToList(); 
       List<string> ncta = cuentas.NumCta.GetType().GetProperties().Select(p => p.Name).ToList(); 
       List<string> desc = cuentas.Desc.GetType().GetProperties().Select(p => p.Name).ToList(); 
       List<string> subdes = cuentas.SubCtaDe.GetType().GetProperties().Select(p => p.Name).ToList(); 
       List<string> nivel = cuentas.Nivel.GetType().GetProperties().Select(p => p.Name).ToList(); 
       List<string> natur = cuentas.Natur.GetType().GetProperties().Select(p => p.Name).ToList(); 
//Create XML from data in list´s 
for (int i = 0; i < coda.Count; i++) 
       { 
        xmlWriter.WriteAttributeString("CodAgrup", coda[i]); 
        xmlWriter.WriteAttributeString("NumCta", ncta[i]); 
        xmlWriter.WriteAttributeString("Desc", desc[i]); 
//write the atribute when property data exists. 
        if (cuentas.SubCtaDe != null) 
        { 
         xmlWriter.WriteAttributeString("SubCtaDe", subdes[i]); 
        } 
        xmlWriter.WriteAttributeString("Nivel", nivel[i]); 
        xmlWriter.WriteAttributeString("Natur", natur[i]); 
        xmlWriter.WriteEndElement(); 

       } 
+0

您的while循环内的代码永远不会执行,因为如果您在实例化'cuentas'后未初始化'cuentas.CodAgrup'将为null。 – jwnace 2014-11-03 15:03:53

回答

1

你的代码是混乱的,但如果我的理解没错,这里是第一个错误我看到:

Ctas cuentas = new Ctas(); 
    int x = 0; 
    while (cuentas.CodAgrup != null) // cuentas.CodAgrup is null from the beginning! 
    { 
     cuentas.CodAgrup.Insert(x, "codagroup"); 
     cuentas.NumCta.Insert(x, "numcta"); 
     cuentas.Desc.Insert(x, "desc"); 
     cuentas.SubCtaDe.Insert(x,"subctade"); 
     cuentas.Nivel.Insert(x, "nivel"); 
     cuentas.Natur.Insert(x, "natur"); 
     x = x + 1; 
    } 

既然你正在寻找一个全新的Ctas对象,并有没有代码来初始化CodAgrup属性,它将具有默认值null,所以代码永远不会进入while循环。

即使它DID,我怀疑它会是一个无限循环,因为你Insert文字值到一个字符串属性,并没有条件,我看到哪里cuentas.CodAgrup永远是空的。

至于你的XML代,为什么不使用内建的XmlSerializer类呢?即使您需要特定格式,也有一些属性可让您自定义生成的XML。

+0

你是一个正确的,应该没有引号,我有一个想法做什么,顺便说一句,如何填写给定的数量未知数的属性进入? – FranciscoL 2014-11-03 17:28:46