所以,我有一些本地化的资源文件。它们是可以格式化的字符串。
例如:
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/