2012-01-31 45 views
16

我試着去獲得從PropertyInfo[]的價值,但我不能得到它的工作:獲得的PropertyInfo價值

foreach (var propertyInfo in foo.GetType().GetProperties()) 
{ 
     var value = propertyInfo.GetValue(this, null); 
} 

例外:Object does not match target type.

心不是這怎麼它應該做些什麼呢?

+0

'this'和'foo'是什麼類型? – BNL 2012-01-31 14:30:12

+0

'this'是否包含'propertyInfo'所代表的屬性? – 2012-01-31 14:30:22

回答

29

當您最初從foo.GetType()獲取PropertyInfo時,您正試圖從this獲取屬性。因此,這將是比較合適的:

var value = propertyInfo.GetValue(foo, null); 

這是假設你想有效地得到foo.SomeProperty

+1

@Johan:不,它指的是你在上下文中的任何對象,就像正常一樣......'propertyInfo'引用循環中的每個'propertyInfo'。 – 2012-01-31 14:38:44

7

你得到異常,因爲this是不一樣的類型foo

你應該確定你正在獲取你將嘗試從中獲取值的同一對象的屬性。我從你的代碼,你希望這是循環的範圍內FOO(這是不是在所有的情況)猜測,所以你需要的那一行更改爲:

var value = propertyInfo.GetValue(foo, null); 
4

您正在處理foo類型中聲明的屬性,但嘗試從this中讀取它們的值,該值顯然不是同一類型。