2009-04-16 19 views
14

Önceki projelerin çeşitli yerlerinde bu kodla birlikte bir Kopyalama yöntemini kullanarak (aynı adlı özelliklere sahip ancak ortak bir kaynaktan türemeyen nesnelerle ilgilenmek için) temel sınıf veya ortak bir arayüz uygulayın).SetValue on PropertyInfo örnek hatası "Nesne hedef türü ile eşleşmiyor" C#

çalışmaları, yeni kod temeli

Yeni bir yer - şimdi bile çok basit örnekler "nesne hedef türü eşleşmiyor" ile DeğerBelirle ... at başarısız ve geçen hafta çalıştı ....

public static void Copy(object fromObj, object toObj) 
    { 
     Type fromObjectType = fromObj.GetType(); 
     Type toObjectType = toObj.GetType(); 

     foreach (System.Reflection.PropertyInfo fromProperty in 
      fromObjectType.GetProperties()) 
     { 
      if (fromProperty.CanRead) 
      { 
       string propertyName = fromProperty.Name; 
       Type propertyType = fromProperty.PropertyType; 

       System.Reflection.PropertyInfo toProperty = 
        toObjectType.GetProperty(propertyName); 

       Type toPropertyType = toProperty.PropertyType; 

       if (toProperty != null && toProperty.CanWrite) 
       { 
        object fromValue = fromProperty.GetValue(fromObj,null); 
        toProperty.SetValue(toProperty,fromValue,null); 
       } 
      } 
     } 
    } 

    private class test 
    { 
     private int val; 
     private string desc; 

     public int Val { get { return val; } set { val = value; } } 

     public string Desc { get { return desc; } set { desc = value; } } 

    } 

    private void TestIt() 
    { 
     test testo = new test(); 
     testo.Val = 2; 
     testo.Desc = "TWO"; 

     test g = new test(); 

     Copy(testo,g); 

    } 

İnşallah birileri ben nerede olduğumu işaret edebilir ???

cevap

17

Dene:

toProperty.SetValue(toObj,fromValue,null); 

yerine toObj arasında, hedef nesne olarak mülkiyet (toProperty) geçmek çalışıyoruz. Bilgi için, bunun bir çoğunu yapıyorsanız, yansıma maliyetini büyük ölçüde azaltabilecek HyperDescriptor düşünebilirsiniz.

+0

D'oh olmalı! Bu yazdığım en son hata düzeltildi - ve bu sefer kontrol etmeyi unutmuşum ... – kpollock

10

toProperty.SetValue(toObj,fromValue,null); 
+4

Çok yavaş sanırım .. –

İlgili konular