我正在通過其他開發人員的一些代碼,我發現一些代碼似乎...好醜和不必要。是一個C#十進制文化依賴
我明白,當解析字符串時,我們需要正確使用文化信息,否則你可以進入「1.2」和「1,2」類型的問題。在這種情況下,開發人員正在使用以小數形式存儲的NumericUpDown。
float fValue = System.Convert.ToSingle(numericUpDown1.Value, System.Globalization.CultureInfo.InvariantCulture)
我的問題是: - 是下面的代碼相同呢? - 文化信息能否妥善處理?
- 這個演員能拋出異常嗎?
float fValue = (float)numericUpDown1.Value;
如果它們不相同(或安全),請解釋原因並提出「正確」解決方案嗎?
提前致謝!
_「然後忽略傳入的文化」_它不會忽略它。相反,重載'Convert.ToDouble(Object,IFormatProvider)'被執行。 – user2190035
@ user2190035呃...什麼?不,不,'Convert.ToDouble'不涉及到轉換到'float' /'Single'。如果你不相信'float IConvertible.ToSingle(IFormatProvider provider)'忽略了[參考源](https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/decimal.cs) '提供者'就像我在我的答案中寫的。 – hvd
你說得對。不知道我在想什麼。 – user2190035