2012-02-06 15 views
5

Posiadam kolekcję słowników składającą się z ponad 100 pól i wartości. Czy istnieje sposób na wypełnienie gigantycznej klasy za pomocą 100 pól korzystających z tej kolekcji?Wypełnianie klasy ze słownika

Klawisz tego słownika odpowiada nazwie właściwości mojej klasy, a wartość będzie wartością właściwości dla klasy.

Dictionary<string, object> myDictionary = new Dictionary<string, object>(); 
myDictionary.Add("MyProperty1", "Hello World"); 
myDictionary.Add("MyProperty2", DateTime.Now); 
myDictionary.Add("MyProperty3", true); 

Wypełnia właściwości następujących klas.

public class MyClass 
{ 
    public string MyProperty1 {get;set;} 
    public DateTime MyProperty2 {get;set;} 
    public bool MyProperty3 {get;set;} 
} 
+0

Lubisz znaczy zapełnić klasę? lub wygenerować klasę? jeśli jest to pierwsze, po prostu użyj odbicia. – ColinE

+0

Czy istnieje powód, dla którego klasa ma setki właściwości, a nie, powiedzmy, klasę kolekcji interfejsu lub typu, która może opisywać każdy fragment danych? –

Odpowiedz

8

Można użyć GetProperties aby uzyskać listę właściwości dla danego typu i używać SetValue ustawić konkretną wartość dla danej nieruchomości:

MyClass myObj = new MyClass(); 
... 
foreach (var pi in typeof(MyClass).GetProperties()) 
{ 
    object value; 
    if (myDictionary.TryGetValue(pi.Name, out value) 
    { 
      pi.SetValue(myObj, value); 
    } 
} 
1

użytkowania

MyClass yourinstance... 

foreach (var KVP in myDictionary) 
{ 
    yourinstance.GetType().GetProperty (KVP.Key).GetSetMethod().Invoke (yourinstance, new object[] { KVP.Value }); 
} 
Powiązane problemy