2012-02-06 29 views
5

100'den fazla alan ve değerden oluşan bir sözlük koleksiyonum var. Bu koleksiyonu kullanarak devasa bir sınıfı 100 alanla doldurmanın bir yolu var mı?Sözlükten bir sınıf doldurun

Bu sözlükteki anahtar, sınıfımın özellik adına karşılık gelir ve değer, sınıf için Mülkün Değeri olacaktır.

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

Aşağıdaki sınıfın özelliklerini doldurur.

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

öyle mi Sınıfı doldurmak demek? ya da sınıfı oluşturmak? Eğer eskiyse, sadece yansımayı kullanın. – ColinE

+0

Sınıfınızın, her bir veri parçasını tanımlayabilen bir arabirim veya tür koleksiyonu sınıfı yerine yüzlerce özelliğe sahip olmasının bir nedeni var mı? –

cevap

8

Belirli bir tür için özelliklerinin bir listesini almak için GetProperties kullanmak ve belirli bir özellik için belli bir değer ayarlamak için SetValue kullanabilirsiniz:

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

Kullanım

MyClass yourinstance... 

foreach (var KVP in myDictionary) 
{ 
    yourinstance.GetType().GetProperty (KVP.Key).GetSetMethod().Invoke (yourinstance, new object[] { KVP.Value }); 
} 
İlgili konular