我有一个这样的方法:
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是从哪个对象派生的?
如果您的目标是将Bar.Test
设置为null
,那么您将调用以下命令:
pInfo.SetValue(myObject.Bar, 100, null);
在语义上相当于:
myObject.Bar.Test = null;
当然,在您的示例中,这将抛出一个异常,因为myObject.Bar
将是null
。