是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?