【问题标题】:PropertyInfo.SetValue of child object?子对象的 PropertyInfo.SetValue?
【发布时间】:2013-01-02 18:56:30
【问题描述】:

我有这样的方法:

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 的引用,但没有Foo 的属性?如果是这样的话,就没有办法从Bar得到Foo
  • 我重写了问题以使问题更清楚,希望..?

标签: c# reflection


【解决方案1】:

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

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

这在语义上等同于:

myObject.Bar.Test = null;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多