2009-04-16 8 views
14

पिछली परियोजनाओं के विभिन्न स्थानों में इस कोड के साथ एक प्रतिलिपि विधि का उपयोग कर रहा था (उन वस्तुओं से निपटने के लिए जिनके नाम समान गुण हैं लेकिन एक आम से प्राप्त नहीं होते हैं आधार वर्ग या एक आम इंटरफेस लागू)।PropertyInfo उदाहरण त्रुटि पर SetValue "ऑब्जेक्ट लक्ष्य प्रकार से मेल नहीं खाता" C#

काम, नए codebase की नई जगह - अब यह भी पर बहुत ही सरल उदाहरण के साथ "ऑब्जेक्ट लक्ष्य प्रकार से मेल नहीं खाता" setValue ... पर नाकाम रहने के है और यह पिछले सप्ताह काम किया ....

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); 

    } 

उम्मीद है कि कोई यह बता सकता है कि मैं कहां जा रहा हूं ???

उत्तर

17

प्रयास करें:

toProperty.SetValue(toObj,fromValue,null); 

आप toObj के बजाय, संपत्ति (toProperty) लक्ष्य वस्तु के रूप में में पारित करने के लिए कोशिश कर रहे हैं। जानकारी के लिए, यदि आप इनमें से बहुत कुछ कर रहे हैं, तो शायद HyperDescriptor पर विचार करें, जो प्रतिबिंब लागत को काफी कम कर सकता है।

+0

डी 'ओह होना चाहिए! यह वह बग है जिसे मैंने आखिरी बार तय किया था - और इस बार जांचना भूल गया ... – kpollock

10

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

मुझे लगता है कि बहुत धीमा .. –

संबंधित मुद्दे