CultureInfo.CurrentCulture在String.Format()中是否真的必要?

时间:2009-01-24 02:53:27

标签: c# .net culture string.format

您认为如何在方法IFormatProvider中提供String.Format(string, object)真的有必要吗?

编写完整变体

是否更好
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);

或只是

String.Format("String is {0}", str);

4 个答案:

答案 0 :(得分:30)

一般情况下,如果要生成的字符串以与当前用户文化无关的方式(例如在注册表中或文件中)保留,则需要使用InvariantCulture。

您将希望将CurrentCulture用于要在UI中呈现给当前用户的字符串(表单,报告)。

如果您使用当前使用InvariantCulture的CurrentCulture,则会出现细微的错误:只有当您有多个不同文化的用户访问同一个注册表项或文件,或者用户更改其默认文化时,才会出现错误。< / p>

明确指定CurrentCulture(如果省略IFormatProvider参数,则为默认值),本质上是文档,表明您已经考虑了上述内容,并且生成的字符串应该使用当前用户的文化。这就是为什么FxCop建议你应该指定IFormatProvider参数。

答案 1 :(得分:19)

如果您未指定IFormatProvider(或等效地传递null),则大多数参数类型最终将根据CultureInfo.CurrentCulture进行格式化。有趣的是,您可以指定一个自定义IFormatProvider,它可以在格式化参数时获得第一次破解,或者根据其他上下文覆盖格式化文化。

请注意CultureInfo.CurrentCulture会影响参数格式,而不会影响资源选择;资源选择由CultureInfo.CurrentUICulture控制。

答案 2 :(得分:6)

不,您不需要指定文化,除非您的字符串包含特定于文化的元素,例如小数分隔符,货币等,这些元素必须根据文化呈现。

答案 3 :(得分:4)

如果您关心应用程序中的本地化(全球化),它尤其有用。也就是说,如果您希望您的应用支持多种语言和特定文化格式,那么您应该使用它。