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)
Col*_*nic 23
在随机的整数样本上进行测试时,使用Windows(CultureTypes.InstalledWin32Cultures)安装的所有352种文化都会得到相同的结果.
丹尼尔说得对,自定义文化可以使用不同的前缀来表示负数,但我怀疑是否有人曾经偶然使用过此功能.
我想.NET开发者认为它与float和其他类型一致.他们还有什么期待?
> int.MaxValue.ToString(CultureInfo.AncientRome)
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM....
Run Code Online (Sandbox Code Playgroud)
有点奇怪; 我本来期望 50.ToString(CultureInfo.CreateSpecificCulture("ar-AE")) 返回“\xd9\xa5\xd9\xa0”,但事实并非如此。
\n\n我刚刚查了一下,问题似乎是 NumberFormatInfo.DigitSubstitution并未实际实现
\n\n\n\n\nDigitSubstitution 属性保留供将来使用。目前,它不用于当前 NumberFormatInfo 对象的解析或格式化操作。
\n
因此,虽然有一个枚举 System.Globalization.DigitShapes,但它实际上并未在 IFormatProvider 的 NumberFormatInfo 位中实现。
\n