变量source
和target
是两个不同类的两个不同实例。但它们都有一个名为 ID 的int属性。
变量tProp
和sProp
都是PropertyInfo
个对象,用于各自对象的ID属性。
sProp
的值为54,IDE Locals windwows将其显示为obj{int}
tProp
是有效的属性,尚未设置。
我正在尝试使用以下代码设置target.ID:
var sVal = sProp.GetValue(source);
tProp.SetValue(target, sVal);
当我点击该行时,我得到“对象与目标类型不匹配”。
我知道我可以通过将sVal
转换为int
来解决此问题,但我正在尝试编写通用代码,并认为至少.NET可以确定这两个对象是完全相同的类型。我错过了什么吗?
除了检查类型和转换之外,还有什么想法解决这个问题?
答案 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对象。
不是真的,tProp
是source
的属性,sProp
是target
的属性,因此发生运行时错误。