ToString(CultureInfo.CurrentCulture)这需要吗?

问题描述 投票:1回答:2

我正在研究一个Api并且所有的字符串都有?.ToString(CultureInfo.CurrentCulture)

这是做什么的,是否需要?那么其他数据类型如int或decimal呢?

c# cultureinfo
2个回答
0
投票

有些文化以不同的方式编写数字(特别是小数)。对于大多数欧洲语言,小数点写为逗号,数字分隔符写为点,例如:

  • 英语100000.34
  • 斯洛伐克100000.34

整数不一定需要它。如果使用数字分隔符进行格式化,则会更加混乱:

  • 英语100,000.34
  • 斯洛伐克100.000.34

更新:正如评论中指出的,ToString()将默认为当前文化。这是一个问题,因为在开发人员的机器上看起来按预期工作的东西对于客户来说看起来会有所不同,并且可能会失败 - 实际上,您没有明确说明您的意图。这就是RS#抱怨它的原因。


0
投票

像Resharper这样的工具建议specify culture explicitly的原因应该是很好理解的:

将数据结构临时转换为文本在很大程度上取决于当前的文化,并且当代码在其区域设置与原始开发者的区域设置不同的机器上执行时,可能会导致意外的结果。为防止出现歧义,ReSharper会警告您可能出现此类问题的代码中的任何实例。

就像你写的那样,你要对它的行为负责。

此外,在我看来,默认值不再足够好。它假设人类将读取格式化文本,并使用希望在我们的进程/线程的开头设置的文化,或者如果不使用环境默认值。 Windows提供了很多设置来自定义薄片的显示方式,以及何时应用程序通常比现在的桌面更有意义 - 只需使用用户想要的东西,他就会满意。

如果您正在处理API项目并且在这些调用中看到CurrentCulture并且文本没有直接显示给用户,那么编写它的最可能的人不明白 - 他只是修复了错误/警告。

© www.soinside.com 2019 - 2024. All rights reserved.