Int32.ToString()是否特定于文化?

Joe*_*ite 64 .net c# resharper cultureinfo

我正在运行ReSharper的测试版,它给了我以下代码的警告:

int id;
// ...
DoSomethingWith(id.ToString());
Run Code Online (Sandbox Code Playgroud)

警告在id.ToString()通话中,它告诉我"明确指定字符串转换中的文化".我理解这个警告,而且我知道如何修复它 - 只需将代码更改为更加笨拙id.ToString(CultureInfo.InvariantCulture).

但我的问题是:这是必要的吗?我的意思是,显然,当您使用类型DateTime(不同的文化具有不同的日期格式)和Double(用于小数点的不同字符)时,指定文化很重要.但是Int32.ToString(),至少在en-US和invariant文化中,根本不添加任何格式.没有逗号,没有小数点,没有美元符号,没有.那么文化会有什么不同?

当您调用无参数时,是否有一些文化实际上会添加某种格式Int32.ToString()?或者这是ReSharper测试版中的错误,这个警告真的不适用Int32(在这种情况下我会提交ReSharper错误报告)?

Dan*_*lba 61

操作系统允许更改数字的号.

Control panel -> 
   Language and regional settings -> 
         Additional settings -> 
             Negative sign
Run Code Online (Sandbox Code Playgroud)

因此,目前的文化可能已经超越了负号.在这种情况下,您需要尊重区域设置,这是警告的原因.您还可以以编程方式更改负号:

    CultureInfo culture = Thread.CurrentThread.CurrentCulture;
    // Make a writable clone
    culture = (CultureInfo) culture.Clone();
    culture.NumberFormat.NegativeSign = "!";
Run Code Online (Sandbox Code Playgroud)

  • 我不确定是否有任何文化使用不同的负号,但前段时间客户报告了一个错误,因为我们的产品无法解析负值,令我惊讶的是,这个疯狂的人被覆盖了使用"!"的负号. .为什么?不知道. (18认同)
  • 注意:String.Format"使用"Int32.ToString(),因此以上所有内容也适用于String.Format. (4认同)
  • 你有一个文化的例子吗? (3认同)
  • 我很高兴没有人试图与这个人交换CSV文件.您可以想象所有数字数据被重新解释为字符串时的痛苦吗? (3认同)

Col*_*nic 23

在随机的整数样本上进行测试时,使用Windows(CultureTypes.InstalledWin32Cultures)安装的所有352种文化都会得到相同的结果.

丹尼尔说得对,自定义文化可以使用不同的前缀来表示负数,但我怀疑是否有人曾经偶然使用过此功能.

我想.NET开发者认为它与float和其他类型一致.他们还有什么期待?

> int.MaxValue.ToString(CultureInfo.AncientRome)
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM....
Run Code Online (Sandbox Code Playgroud)

  • 我对"守则"感到非常不安,好像数以百万计的家庭作业突然在恐怖中呐喊,并突然沉默. (11认同)
  • +0实际上,古罗马人拥有更多用途的大型系统 - http://www.knowtheromans.co.uk/img/Roman-Numerals-Large-Numbers.png; 还没有足够的jQuery !!! (3认同)
  • @vaxquis 该链接现已失效,请参阅[存档图像](https://web.archive.org/web/*/http://www.knowtheromans.co.uk/img/Roman-Numerals-Large-Numbers .png)。 (2认同)

Ric*_*den 6

有点奇怪; 我本来期望 50.ToString(CultureInfo.CreateSpecificCulture("ar-AE")) 返回“\xd9\xa5\xd9\xa0”,但事实并非如此。

\n\n

我刚刚查了一下,问题似乎是 NumberFormatInfo.DigitSubstitution并未实际实现

\n\n
\n

DigitSubstitution 属性保留供将来使用。目前,它不用于当前 NumberFormatInfo 对象的解析或格式化操作。

\n
\n\n

因此,虽然有一个枚举 System.Globalization.DigitShapes,但它实际上并未在 IFormatProvider 的 NumberFormatInfo 位中实现。

\n