2009-10-30 53 views
0

我有一個問題,在使用反射的對象屬性轉換爲字符串...轉換反射屬性爲String

string value = Convert.ToString(typeof(T).GetProperty(ValueField).GetValue(data, null)); 

這將引發「對象不匹配目標類型。」何時返回字符串以外的任何類型?

回答

2

如果由於某種原因,你不想使用屬性的ToString方法,可以約束T來實現IConvertible類:

public string DoSomething<T>(object data) where T: IConvertible { ... } 
+0

雖然其他兩個解決方案更務實,我給你+1以及以另一種方式解決問題。 – OregonGhost 2009-10-30 14:36:46

+0

我有點尷尬,這是因爲我的初步答案是由於問題引發的隧道視覺,所以非常感謝:)(另外,有人可能會用不同的方式覆蓋ToString和IConvertible.ToString。) – 2009-10-30 15:00:34

+0

As真棒,因爲你的答案是。我必須注意到,我將GetValue指向集合而不是正確的對象...... :) – 2009-10-30 15:49:45

2

你不能每個對象轉換爲一個字符串,但每對象有一個ToString方法。所以,你可以更改您的代碼:

string value = typeof(T).GetProperty(ValueField).GetValue(data, null).ToString(); 
3

使用類型的內置ToString方法而不是調用Convert.ToString。所有類型都有從object繼承的ToString方法,而Convert.ToString僅適用於實現IConvertible接口的類型。

string value = 
    typeof(T).GetProperty(ValueField).GetValue(data, null).ToString();