2013-01-02 52 views
1

我有一個方法是這樣的:子對象的PropertyInfo.SetValue?

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。我無法知道當前PropertyInfo屬於哪個類(它是奇怪的自定義ORM的一部分)。有沒有辦法知道PropertyInfo來自哪個對象?

+0

你是說你有'酒吧'的參考,但不是'Foo',它是一個屬性?如果是這樣的話,就沒有辦法從'Bar'獲取'Foo'。 –

+0

我重寫了這個問題,希望問題更清楚。 – ConditionRacer

回答

3

如果你的目標是建立Bar.Testnull,那麼你會調用此:

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

這是語義上等價於:

myObject.Bar.Test = null; 

當然,在你的例子,這會引發例外,因爲myObject.Bar將是null