为什么Reflection的SetValue会抛出异常?

时间:2012-01-25 11:36:59

标签: c# .net reflection

我试图将一些属性值从一个对象复制到另一个对象(两个对象都实现了IVenue,但是对象b需要动态删除一些值)。想要避免很多代码,如:

a.Property1 = b.Property1;
a.Property2 = b.Property2;
etc

我正在尝试使用Reflection循环属性并复制:

public VenueContract(TVDData.Interfaces.IVenue v, List<TVDData.APIClientPermittedFields> permittedFields)
{
    PropertyInfo[] Properties = this.GetType().GetProperties( BindingFlags.Public | BindingFlags.Instance);
    foreach (PropertyInfo p in Properties)
    {
        PropertyInfo source = v.GetType().GetProperty(p.Name, BindingFlags.Public | BindingFlags.Instance);
        p.SetValue (p, source.GetValue(v,null),null);
    }
}

但是我收到错误:

  

“对象与目标类型不匹配”

两个属性都是int类型,声明为:

public int ID { get; set; }

问题似乎在于 p.SetValue source.GetValue(v,null)返回预期值。

任何人都可以解释我做错了什么吗?如果这是一个更合适的解决方案,请随意提出一个完全替代的方法。

1 个答案:

答案 0 :(得分:4)

SetValue上的第一个论点不正确 - 它尝试在PropertyInfo 上设置属性

你可能意味着:

 p.SetValue(this, source.GetValue(v, null), null);