2009-06-12 33 views
4

我收到CA1305警告。CA1305:int.Parse(字符串)

Microsoft.Globalization:因爲 'int.Parse(字符串)' 的 行爲也可依據該 當前用戶的區域設置, 在 「_Default.CalculateImageButton_Click替換這個調用(對象, ImageClickEventArgs) '打電話給 'int.Parse(字符串, IFormatProvider)'。如果 'int.Parse(字符串, IFormatProvider)'的結果將顯示爲 用戶,則將'CultureInfo.CurrentCulture'指定爲 'IFormatProvider'參數。 否則,如果結果將是 存儲和軟件訪問,如 ,當它被持久化到磁盤或 數據庫,指定 'CultureInfo.InvariantCulture'。

如果在解析Int32時省略指定文化,究竟會出現什麼問題?

回答

9

這意味着當您從數據文件或數據庫記錄中讀取「1,234」,然後嘗試通過Parse將其轉換爲Int時,您將在美國得到1234,在德國得到1。警告提供了很好的建議 - 如果你正在與用戶交互,指定CurrentCulture(感謝Andrew!),並且如果你正在與文件系統或數據庫(或任何用戶)交互,請使用InvariantCulture

+1

我相信CurrentUICulture只會將字符串資源拉出來。對於所有格式,您應該使用CurrentCulture(注意缺乏UI)。否則,某些文化會導致你的代碼被拋出。 請參閱http://code.google.com/p/dotnetopenid/issues/detail?id=60瞭解由此導致的錯誤示例。 – 2009-08-12 13:28:42

1

如果你是解析一個整數,它可能有一千個分隔符,可以是「,」或「。」。取決於語言環境。