【问题标题】:Use of CultureInfo.InvariantCultureCultureInfo.InvariantCulture 的使用
【发布时间】:2015-03-13 13:12:20
【问题描述】:

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

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

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

谢谢,

马蒂亚斯。

【问题讨论】:

  • “对”和“错”在观察者的眼中:)
  • 你能给出number.Text的示例值吗?
  • 这里是一个 number.text 的例子:0.9

标签: c# decimal cultureinfo


【解决方案1】:

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

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

这个想法很简单——是用户的数据 (=> CurrentCulture),还是应该是全局的 (=> InvariantCulture)?

【讨论】:

  • 感谢 Luaan,这很有意义,我想这不是编程的事情,而是从用户界面的角度以及内部代码处理的角度来看我需要的东西
【解决方案2】:

如果您执行正确的国际化程序...

A) 如果您使用的是 Winforms 或 WPF,或者一般用户将在程序的机器上“工作”,那么输入解析应该使用 CurrentCulture 完成

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

然后,

A)您“内部”保存的数据(以便由您的程序写入然后读取)应使用InvariantCulture

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

C) 你导出给用户的文件应该遵循前面的规则(关于用户界面的那些),除非你使用像 XML 这样的“标准定义格式”(然后使用 Xml 格式化程序)

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多