从GetValue获取的数据调用SetValue时,“对象与目标类型不匹配”

时间:2017-08-17 18:45:40

标签: c# .net reflection

变量sourcetarget是两个不同类的两个不同实例。但它们都有一个名为 ID 的int属性。

变量tPropsProp都是PropertyInfo个对象,用于各自对象的ID属性。

sProp的值为54,IDE Locals windwows将其显示为obj{int}

类型

tProp是有效的属性,尚未设置。

我正在尝试使用以下代码设置target.ID:

var sVal = sProp.GetValue(source);
tProp.SetValue(target, sVal);

当我点击该行时,我得到“对象与目标类型不匹配”。

我知道我可以通过将sVal转换为int来解决此问题,但我正在尝试编写通用代码,并认为至少.NET可以确定这两个对象是完全相同的类型。我错过了什么吗?

除了检查类型和转换之外,还有什么想法解决这个问题?

1 个答案:

答案 0 :(得分:0)

您有拼写错误或其他内容,因此您尝试设置属于不同对象的属性值。例如,有两个这样的类:

public class A
{
    public int ID {get;set;}
}

public class B
{
    public int ID {get;set;}
}

要重现您的问题,请取消注释下面的行(sProp不属于目标实例):

    var source = new A();
    source.ID = 54;
    var target = new B();

    var sProp = source.GetType().GetProperty("ID");
    var tProp = target.GetType().GetProperty("ID");

    var sVal = sProp.GetValue(source);
    //sProp.SetValue(target, sVal); // will throw Object does not match target type  - sProp doesn't belong to target instance
    tProp.SetValue(target, sVal);

我认为你的陈述

  

变量tProp和sProp都是各自对象上ID属性的PropertyInfo对象。

不是真的,tPropsource的属性,sProptarget的属性,因此发生运行时错误。