将数字,日期和时间格式化为字符串或从字符串中解析时,会使用一种区域性来确定其处理方式。例如,在主流en-US
文化中,您具有以下字符串表示形式:
- 1,000,000.00-一百万,两位小数
- 1/29/2013-发布日期
在我的文化(da-DK
)中,值具有以下字符串表示形式:
- 1.000.000,00-一百万,两位小数
- 2013年1月29日-发布日期
在Windows操作系统中,用户甚至可以自定义数字和日期/时间的格式,还可以选择操作系统以外的其他区域。所使用的格式是用户的选择方式,应该是这样。
所以,当你格式化值使用被显示给用户,例如ToString
或String.Format
或使用从字符串解析DateTime.Parse
或Decimal.Parse
默认是使用CultureInfo.CurrentCulture
。这允许用户控制格式。
但是,许多字符串格式设置和解析实际上不是在应用程序和用户之间交换字符串,而是在应用程序和某些数据格式(例如XML或CSV文件)之间交换字符串。在那种情况下,您不想使用,CultureInfo.CurrentCulture
因为如果格式化和解析是使用不同的区域性进行的,则它可能会中断。在这种情况下,您要使用CultureInfo.InvariantCulture
(基于en-US
区域性)。这样可以确保值可以无问题地往返。
该ReSharper的给你警告的原因是,一些应用程序编写者不知道这种区别可能导致意想不到的结果,但他们从来没有发现这一点,因为他们CultureInfo.CurrentCulture
就是en-US
具有相同行为CultureInfo.InvariantCulture
。但是,一旦在另一种区域性中使用了该应用程序,就有机会使用一种区域性进行格式化而另一种区域性用于解析该应用程序。
总结一下:
CultureInfo.CurrentCulture
如果要格式化或解析用户字符串,请使用(默认)。
- 使用
CultureInfo.InvariantCulture
如果格式化或解析应该由一个软件是解析的字符串。
- 由于用户无法控制格式化和解析的方式,因此很少使用特定的国家文化。