2014-11-03 37 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