2012-02-06 3 views
5

У меня есть коллекция словарей из более чем 100 полей и значений. Есть ли способ заполнить гигантский класс со 100 полями, используя эту коллекцию?Заполнять класс из Словаря

Ключ в этом словаре соответствует имени свойства моего класса, а значением будет значение свойства для класса.

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

Задает свойства следующего класса.

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

сделать вас означает заполнить класс? или создать класс? если это первый, просто используйте отражение. – ColinE

+0

Есть ли причина, почему ваш класс имеет сотни свойств, а не, скажем, класс коллекции интерфейса или типа, который может описывать каждую часть данных? –

ответ

8

Вы можете использовать GetProperties, чтобы получить список свойств для данного типа и использовать SetValue установить конкретное значение для данного свойства:

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

Использование

MyClass yourinstance... 

foreach (var KVP in myDictionary) 
{ 
    yourinstance.GetType().GetProperty (KVP.Key).GetSetMethod().Invoke (yourinstance, new object[] { KVP.Value }); 
} 
Смежные вопросы