2013-03-30 100 views
0

我有以下測試代碼給我一些問題。我希望能夠傳遞一個布爾值作爲字符串,EG「true」或「false」並返回一個布爾值。該功能應該能夠處理其他類型的,所以我不能只用Convert.ToBoolean()等TypeConverter不會轉換爲布爾值

protected static T GetDefaultValue<T>(object propertyName) 
    { 
     var tc = new TypeConverter(); 

     return (T)tc.ConvertTo(propertyName, typeof(T)); 
    } 

當我打電話與這行代碼上面的函數,它拋出一個異常:

bool b = GetDefaultValue<bool>("false"); 

它表示「'TypeConverter'無法將'System.String'轉換爲'System.Boolean'。」

任何人都可以指出如何以我想要的方式使用TypeConverter或不這樣工作嗎?

回答

2

您可能會在這裏遇到很多hurtin'。首先,不只是任何TypeConverter都會這樣做,您必須找到知道如何將字符串轉換爲布爾值的特定字符串。你可以用TypeDescriptor.GetConverter()獲得一個。對於bool不是問題,你會得到System.ComponentModel.BooleanConventer。你必須使用它的ConvertFrom()方法,而不是ConvertTo。所以這工作正常:

protected static T GetDefaultValue<T>(object propertyName) { 
     var tc = TypeDescriptor.GetConverter(typeof(T)); 
     return (T)tc.ConvertFrom(propertyName); 
    } 
    ... 
     bool b = GetDefaultValue<bool>("false"); // fine 

但請注意,.NET只有一個有限的內置轉換器集。只是通常在「屬性」窗口中找到的類型。自定義類型需要從TypeConverter類派生自己的轉換器。

+0

感謝您的回覆。當例外表示無法進行轉換時,我以爲我會生氣。 – Retrocoder