使用 CultureInfo.InvariantCulture

Use of CultureInfo.InvariantCulture

我正在从事一个在文本框中使用小数的项目。我目前正在开发一台将小数点分隔符设置为“,”而不是“。”的机器。所以我在将文本字符串解析为十进制时不得不使用这句话:

decimal number = Decimal.Parse(number.Text, CultureInfo.InvariantCulture);

现在... CultureInfo.InvariantCulture 是正确的做法还是我应该改用 CurrentCulture?

谢谢,

马蒂亚斯

对于用户输入,您通常需要 CultureInfo.CurrentCulture 使用的语言环境对您来说不自然,这不是通常的用户情况 - 如果用户在整个系统中将 , 作为小数点,他们我可能习惯于使用它,而不是您喜欢的 .。换句话说,当您在具有这样语言环境的系统上进行测试时,学会使用 , 而不是 . - 这是进行语言环境测试的一部分有用:)

另一方面,如果您是将值存储在配置文件或类似文件中,你真的想使用 CultureInfo.InvariantCulture.

思路很简单——它是用户的数据 (=> CurrentCulture),还是应该是全局的 (=> InvariantCulture)?

如果你做一个正确的国际化程序...

A) 如果您使用的是 Winforms 或 WPF 或者通常用户将 "work" 在程序的机器上,那么输入解析应该使用 CurrentCulture

B) 如果你是网络编程,那么用户应该能够select它的文化,CurrentCulture(网络服务器的文化)应该只被用作默认

然后,

A) 你保存的数据 "internally" (所以要写入然后由你的程序读取) 应该使用 InvariantCulture,

B) 与其他应用程序交换的数据最好用 InvariantCulture 写入(除非其他应用程序写得不好并且需要特定格式),

C) 你导出给用户的文件应该遵循之前的规则(关于用户界面的规则),除非你使用 "standard-defined format" 像 XML (然后使用 Xml格式化程序)