1

我有这样的方法:

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

4

1 回答 1

3

如果您的目标是设置Bar.Testnull,那么您将调用它:

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

这在语义上等价于:

myObject.Bar.Test = null;

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

于 2013-01-02T18:59:51.910 回答