gpt4 book ai didi

c# - .ToString() 中的 CultureInfo.InvariantCulture

转载 作者:行者123 更新时间:2023-11-30 19:09:39 26 4
gpt4 key购买 nike

我目前正在修复 FxCop 问题,所以我遇到了在使用 ToString() 转换字符串时必须提供 cultureinfo 的问题。

目前在我的代码中我们没有作为 IFormatProvider 传递任何东西,所以我读过一些 msdn 文章说当你没有为 cultureinfo 传递任何值时它会分配一个默认值,当你将 CultureInfo 指定为 InvariantCulture 它将独立于任何文化。

我的问题是,“default 和 CultureInfo.InvariantCulture 是一回事吗?我可以将所有代码从 default 替换为 InvariantCulture 吗?”

例如:

 int st = 123;
String s = st.ToString(123); // this will be taken as default
String s = st.ToString(123, CultureInfo.InvariantCulture); // culture is specified externally

第二行和第三行是等价的吗?

最佳答案

Is default and CultureInfo.InvariantCulture are one and the same?

不,绝对不是。 默认 区域性(最初)取决于操作系统设置。不变文化是一种“中性”文化。

您的 123 示例不是很好,因为大多数(所有?)文化将以相同的方式表示整数 - 至少在您使用带有分组分隔符等的格式之前是这样。(我认为 .NET 在格式化整数时支持非阿拉伯数字。)

将其与格式化十进制值进行比较,例如:

decimal x = 123.45m;
Console.WriteLine(x.ToString()); // Might be 123,45
Console.WriteLine(x.ToString(CultureInfo.InvariantCulture)); // Always 123.45

如果您在(比如)法国运行上述代码,默认文化将是法语,它使用逗号作为小数点分隔符 - 因此它将打印出“123,45”。

要记住的经验法则是,不变区域性适用于机器对机器通信(例如,格式化 JSON 或 XML 中的值),而其他区域性更适合直接向用户显示信息。

尽管默认文化最初是基于操作系统设置的,但可以使用 Thread.CurrentCultureThread.CurrentUICulture 进行更改;后者用于查找已翻译的资源,而前者用于进行上述格式化决策。您可以在任何 线程上设置这些属性,但通常您会使用 Thread.CurrentThread.CurrentCulture = ...

关于c# - .ToString() 中的 CultureInfo.InvariantCulture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com