子对象的PropertyInfo.SetValue?

时间:2013-01-02 18:56:30

标签: c# reflection

我有这样的方法:

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是从哪个对象派生出来的?

1 个答案:

答案 0 :(得分:3)

如果你的目标是将Bar.Test设置为null,那么你会调用它:

pInfo.SetValue(myObject.Bar, 100, null);

这在语义上等同于:

myObject.Bar.Test = null;

当然,在您的示例中,这会引发异常,因为myObject.Bar将是null