2011-05-24 78 views
2

關於解析值,我發現@hugoware這篇偉大的文章:http://hugoware.net/blog/more-control-when-parsing-values。我在項目中重用了他的代碼示例,但現在我注意到在最後一個塊(他的代碼行154)中,他使用Convert.ChangeType()方法作爲最後一次嘗試「轉換」該值。Convert.ChangeType()對字符串值有意義嗎?

現在我不知道這是否合理,因爲我們總是從一個字符串值開始,我猜Convert.ChangeType只對值類型進行轉換?嘗試這樣做還是會失敗?

回答

1

你可以用字符串使用Convert.ChangeType()。請參閱MSDN文檔:ChangeType

從MSDN:

string s = "12/12/98"; 
DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime)); 

在上述情況下從一個串轉換是有意義的。

通過使用這種方法,我認爲有可能進一步擴展它來處理非字符串值,例如,

private static bool _PerformConvert<T,U>(U value, ref T result) 
{ 
    object convert = Convert.ChangeType(value, typeof(U)); 
    // Continue ... 
} 

這可能是有意義的是能夠從任何值圍繞轉換例如,如果你要的是提供了一個對象的數字表示(它發生!),你可以使用第三方的dll的接口在第三方表示和另一種表示之間進行轉換的代碼的更通用版本,這對您的代碼更有意義。

+0

好,所以他的代碼將是一個內置的值類型的回退,沒有靜態的Parse方法(如果有的話)... – Koen 2011-05-24 09:44:06

9

如果你只是要轉換的字符串,我建議你用ConvertToString/ConvertFromString

TypeConverter converter = TypeDescriptor.GetConverter(type); 
string res = converter.ConvertToString(obj); 
object original = converter.ConvertFromString(res); 

-

+0

這是什麼轉換靜態調用使用?也就是說,'Convert.ToInt32(「2010」);' – 2011-05-24 09:40:51

相關問題