c# - FxCop CA1305 : CurrentCulture vs. CurrentUICulture

标签 c# cultureinfo string-formatting currentculture currentuiculture

所以,我有一些本地化的资源文件。它们是可以格式化的字符串。

例如:

MyResource.resx
 Title: "MyApp - Ver: {0}"

然后我这样返回它:

public String Title
{
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); }
}

我了解 CurrentUICulture 和 CurrentCulture 之间的区别,但 FxCop 告诉我改用 CurrentCulture?

最佳答案

在某种程度上 FxCop 是正确的:在这种情况下您不应该使用 CurrentUICulture。正如其他人所说,CurrentCulture 用于区域设置感知格式,而 CurrentUICulture 用于从资源中读取可翻译字符串。
您在这里所做的是格式化数字,因此 FxCop 提示您使用了不正确的 CultureInfo。不幸的是,FxCop 没有告诉您的是,您实际上应该使用 CultureInfo.InvariantCulture。为什么?因为版本号是不依赖于 Locale 的东西。你总是会看到类似 1.9 而不是 1,9 的东西。因此 InvariantCulture 是必经之路。
微软甚至提供了特定的类来存储版本信息 - 奇怪的是它的名字是 Version (AFAIR 它在 System 命名空间中)。当您执行 ToString() 时,这将始终向您显示版本号,就像我之前提到的那样。当您实例化它时,它的构造函数还需要语言环境不变的版本字符串。

关于c# - FxCop CA1305 : CurrentCulture vs. CurrentUICulture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795891/

相关文章:

c# - 我怎样才能让所有的游戏对象依次闪烁?

c# - Java SSL 套接字服务器不正确的 InputStream

.net - CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern 在 .Net 3.5 中被破坏了吗?

c# - 将 float 显示为至少保留 1 位小数的字符串

python - Python 中 str.format() 中 *args 或 ** kwargs 的可变/任意数量

c# - 仅在需要时使用科学记数法

C# XMLNodeList 项目子项

c# - GetDirectoryContents 方法不显示超过 28MB 的文件

c# - 确定 CultureInfo 是否使用特定语言的替代方法?

wpf - 如何在 WPF 中使用 Windows 的自定义区域和语言设置