为什么在String转换中指定文化

时间:2014-04-05 22:43:05

标签: c#

Resharper警告我在执行int.ToString()时需要指定一个字符串文化

例如:

int Value = Id.ToString(); // Where Id is an int

这只是resharper是迂腐,还是有理由我需要提供一个文化设置来将int转换为字符串?

如果有理由这样做 - 当我的网站在全球使用时,最好使用什么?它应该只反映服务器设置,以便安全地完成内部转换吗?

2 个答案:

答案 0 :(得分:13)

因为,例如,英国文化使用'。'作为小数点,法国文化使用','与千分之几相反。指定文化会消除这种歧义,以便代码在为不同语言配置的Windows操作系统上执行相同的操作,尤其是在将已解析的值提交到持久存储时。

答案 1 :(得分:5)

原因是数字的字符串表示形式因国家/地区而异。

有些人使用'。'作为千分隔符,有些使用',有些只是根本不使用任何符号。

没有参数的ToString重载使用当前文化,因此您的输出将根据计算机的设置而有所不同。

那就是说,我的经验法则是:

  • 每个内部表示必须是InvariantCulture(永远不要在服务器设置上中继!)
  • 演示文稿中的所有内容都必须使用最终用户的区域设置

希望有所帮助