2014-01-23 90 views
0

我試圖通過字典(button_click中的代碼是我正在嘗試修復的代碼)進行循環以獲取我所有的類屬性。而不是象現在的代碼一樣一個一個地寫出來。目前的版本工作正常,但如果一個應該有50個或更多的屬性,我認爲必須有一個更簡單的方法來做到這一點與某種循環。如何遍歷字典以獲取所有類屬性?

class Person 
     { 
      public int PersNr { get; set; } 
      public string Name { get; set; } 
      public string BioPappa { get; set; } 
      public Adress Adress { get; set; } 


      public static Dictionary<int, Person> Metod() 
      { 
       var dict = new Dictionary<int, Person>(); 

       dict.Add(8706, new Person 
       { 
        Name = "Person", 
        PersNr = 8706, 
        BioPappa = "Dad", 
        Adress = new Adress 
        { 
         Land = "Land", 
         PostNr = 35343, 
         Stad = "city" 
        } 
       }); 

       dict.Add(840, new Person 
       { 
        Name = "Person", 
        PersNr = 840, 
        BioPappa = "Erik" 
       }); 
       return dict; 

      } 

     } 

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Dictionary<int, Person> myDic = Person.Metod(); 
      var person = myDic[int.Parse(textBoxSok.Text)]; 

      listBox1.Items.Add(person.Name); 
      listBox1.Items.Add(person.PersNr); 
      listBox1.Items.Add(person.BioPappa); 
      listBox1.Items.Add(person.Adress.Stad); 
      listBox1.Items.Add(person.Adress.PostNr); 
      listBox1.Items.Add(person.Adress.Land);   
     } 
    } 
+0

填充你的字典裏從一個循環文件​​會更容易些。儘管如此,你仍然需要定義所有的數據。 –

+0

對我來說你的問題並不清楚 – akonsu

+0

保持這種方式,這是easy.and如果你有一個類50個屬性修復你的設計。 –

回答

0

東西讓你開始(使用System.Reflection):

private void getProperties(Object obj, ListBox listBox1) 
{ 
    PropertyInfo[] pi = obj.GetType().GetProperties(); 
    foreach (PropertyInfo p in pi) 
    { 
     if (p.PropertyType.IsGenericType) 
     { 
      object o = p.GetValue(obj, null); 
      if (o != null) 
      { 
       if (o is Address) 
        getProperties(o, listBox1); 
       else 
        listBox1.Items.Add(o.ToString()); 
      } 
     } 
    } 
} 
+0

此代碼是否創建一個數組,其中存儲類Person的類型/屬性 ?當我通過循環所有它返回的是null。另外,我應該使用「使用System.Reflection」? 如果不,我會得到錯誤。 – user3228992

+0

如果我將「if(p.PropertyType.IsGenericType)」更改爲「if(p.PropertyType.IsVisible)」。我得到它與基地女巫是「人」工作。 :)但它仍然不顯示我的Adress類的屬性。你知道爲什麼嗎? – user3228992

+0

更改爲包含地址。 – klugerama