是Int32.ToString()文化
我正在运行ReSharper的测试版,它给我警告以下代码:
int id;
// ...
DoSomethingWith(id.ToString());
警告是在id.ToString()
调用,它告诉我“明确指定字符串转换中的文化”。 我理解这个警告,并且我知道如何解决它 - 只需将代码更改为id.ToString(CultureInfo.InvariantCulture)
。
但我的问题是:这是必要的吗? 我的意思是,当你使用DateTime
(不同的文化有不同的日期格式)和Double
(不同的字符用于小数点)时,指定文化很重要。 但是Int32.ToString()
,至少在en-US和不变的文化中,根本不添加任何格式。 没有逗号,没有小数点,没有美元符号,什么都没有。 那么文化会有什么不同呢?
当你调用无参数的Int32.ToString()
时,是否有一些文化实际上添加了某种格式? 或者这是ReSharper测试版中的一个错误,并且这个警告确实不适用于Int32
(在这种情况下,我将提交ReSharper错误报告)?
操作系统允许更改数字的负号。
Control panel ->
Language and regional settings ->
Additional settings ->
Negative sign
所以,现在的文化可能已经超越了负面信号。 在这种情况下,您需要尊重区域设置,这是警告的原因。 您还可以通过编程方式更改负号:
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
// Make a writable clone
culture = (CultureInfo) culture.Clone();
culture.NumberFormat.NegativeSign = "!";
如随机抽样样本所测试的,所有安装了Windows( CultureTypes.InstalledWin32Cultures
)的文化CultureTypes.InstalledWin32Cultures
得到相同的结果。
丹尼尔是正确的注意到,一种习俗文化可以使用不同的前缀负数,但我怀疑任何人曾经使用这个功能,除非意外。
我猜.NET开发人员是否与float和其他类型一致。 他们还期待什么?
> int.MaxValue.ToString(CultureInfo.AncientRome)
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM....
是。 这取决于当前的文化。 从MSDN文档:
返回值使用通用数值格式说明符(“G”)和当前区域性的NumberFormatInfo对象进行格式化。
强调我的
Resharper最有可能希望你明确你打算使用的文化。 由于省略它取决于在不同机器上执行时可能会改变的行为。
链接地址: http://www.djcxy.com/p/13051.html上一篇: Is Int32.ToString() culture
下一篇: Which equals operator (== vs ===) should be used in JavaScript comparisons?