PropertyInfo.设置子对象的值

本文关键字:对象 设置 PropertyInfo | 更新日期: 2023-09-27 17:50:38

我有一个这样的方法:

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

PropertyInfo.设置子对象的值

如果您的目标是将Bar.Test设置为null,那么您将调用以下命令:

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

在语义上相当于:

myObject.Bar.Test = null;

当然,在您的示例中,这将抛出一个异常,因为myObject.Bar将是null