我有这样的方法:
var foo = new Foo();
MapObject(myMap, foo);
private void MapObject(Dictionary<string, PropertyInfo> map, object myObject)
{
foreach(var key in map.Keys)
{
int someValue = myDataSet.GetValue(key);
PropertyInfo pInfo = map[key];
pInfo.SetValue(myObject, someValue, null);
}
}
问题在于,有时,PropertyInfo引用myObject的子类中的属性。例如:
class Foo
{
Bar b { get; set; }
}
class Bar
{
string Test { get; set; }
}
发生这种情况时,PropertyInfo.SetValue会抛出一个类型异常,因为它无法在对象Foo上设置属性Test。我无法知道当前PropertyInfo属于哪个类(它是一个奇怪的自定义ORM的一部分)。有没有办法知道PropertyInfo是从哪个对象派生出来的?
答案 0 :(得分:3)
如果你的目标是将Bar.Test
设置为null
,那么你会调用它:
pInfo.SetValue(myObject.Bar, 100, null);
这在语义上等同于:
myObject.Bar.Test = null;
当然,在您的示例中,这会引发异常,因为myObject.Bar
将是null
。