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.Testすることnullである場合は、次のように呼び出します。

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

これは意味的に次と同等です。

myObject.Bar.Test = null;

もちろん、あなたの例では、これは例外をスローしmyObject.Barますnull

于 2013-01-02T18:59:51.910 に答える