我有一個問題,在使用反射的對象屬性轉換爲字符串...轉換反射屬性爲String
string value = Convert.ToString(typeof(T).GetProperty(ValueField).GetValue(data, null));
這將引發「對象不匹配目標類型。」何時返回字符串以外的任何類型?
我有一個問題,在使用反射的對象屬性轉換爲字符串...轉換反射屬性爲String
string value = Convert.ToString(typeof(T).GetProperty(ValueField).GetValue(data, null));
這將引發「對象不匹配目標類型。」何時返回字符串以外的任何類型?
如果由於某種原因,你不想使用屬性的ToString
方法,可以約束T
來實現IConvertible
類:
public string DoSomething<T>(object data) where T: IConvertible { ... }
你不能每個對象轉換爲一個字符串,但每對象有一個ToString方法。所以,你可以更改您的代碼:
string value = typeof(T).GetProperty(ValueField).GetValue(data, null).ToString();
使用類型的內置ToString
方法而不是調用Convert.ToString
。所有類型都有從object
繼承的ToString
方法,而Convert.ToString
僅適用於實現IConvertible
接口的類型。
string value =
typeof(T).GetProperty(ValueField).GetValue(data, null).ToString();
雖然其他兩個解決方案更務實,我給你+1以及以另一種方式解決問題。 – OregonGhost 2009-10-30 14:36:46
我有點尷尬,這是因爲我的初步答案是由於問題引發的隧道視覺,所以非常感謝:)(另外,有人可能會用不同的方式覆蓋ToString和IConvertible.ToString。) – 2009-10-30 15:00:34
As真棒,因爲你的答案是。我必須注意到,我將GetValue指向集合而不是正確的對象...... :) – 2009-10-30 15:49:45