你认为在String.Format(string, object)
方法中提供IFormatProvider
是否真的必要?
写全变体更好吗?
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
或者只是
String.Format("String is {0}", str);
?
你认为在String.Format(string, object)
方法中提供IFormatProvider
是否真的必要?
写全变体更好吗?
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
String.Format("String is {0}", str);
?
通常情况下,如果你生成的字符串需要以独立于当前用户文化的方式进行持久化(如在注册表或文件中),则应使用InvariantCulture。
如果要向当前用户呈现字符串(如表单、报告),则应使用CurrentCulture。
如果在应该使用InvariantCulture的地方使用CurrentCulture,则可能会出现微妙的错误:只有当多个具有不同文化的用户访问相同的注册表项或文件时,或者用户更改默认文化时才会暴露这些错误。
明确指定CurrentCulture(如果省略IFormatProvider参数,则为默认值)实际上是一种文档记录,它表明你已经考虑过上述问题,并且正在生成的字符串应该使用当前用户的文化。这就是为什么FxCop建议你应该指定IFormatProvider参数的原因。
IFormatProvider
(或等效地传递null
),大多数参数类型最终将按照CultureInfo.CurrentCulture
进行格式化。有趣的是,您可以指定自定义的IFormatProvider
来优先处理格式化参数,或根据其他上下文覆盖格式化区域设置。CultureInfo.CurrentCulture
会影响参数格式化,而不是资源选择;资源选择由CultureInfo.CurrentUICulture
控制。如果您关心应用的本地化(全球化),那么它将特别有用,尤其是在涉及IT技术方面。也就是说,如果您希望您的应用程序支持多种语言和文化特定格式,那么您应该使用它。