2009-04-16 229 views
14

在以前的项目中的各个位置对此代码使用了一个Copy方法(处理具有相同命名属性但不是来自公共对象的对象基类或实现一个通用接口)。PropertyInfo上的SetValue实例错误“对象与目标类型不匹配”c#

新的工作,新的代码库的地方 - 现在它的失败在与“对象不匹配目标类型”即使是在非常简单的例子的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

D'哦!这是我修复了最后一次写入错误的错误 - 忘了检查这个时间... – kpollock 2009-04-16 11:55:02

10

应该

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

太慢了,我想.. – 2009-04-16 11:14:01

相关问题