您认为在方法String.Format(string, object)
中提供IFormatProvider
真的有必要吗?CultureInfo.CurrentCulture在String.Format()中真的需要吗?
是更好地写满变种
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
或只是
String.Format("String is {0}", str);
?
您认为在方法String.Format(string, object)
中提供IFormatProvider
真的有必要吗?CultureInfo.CurrentCulture在String.Format()中真的需要吗?
是更好地写满变种
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
或只是
String.Format("String is {0}", str);
?
通常,如果要生成的字符串以独立于当前用户文化(例如注册表或文件中)的方式持续存在,则需要使用InvariantCulture。
您将需要使用CurrentCulture来将当前用户(表单,报表)呈现在UI中的字符串。
如果您在应使用InvariantCulture的地方使用CurrentCulture,则可能会出现微妙的错误:只有当具有不同文化的多个用户访问相同的注册表项或文件或用户更改默认文化时才会显示错误。
明确指定CurrentCulture(如果IFormatProvider参数被省略,则默认),基本上是文档,它说明您已经考虑了上述内容,并且生成的字符串应该使用当前用户的文化。这就是为什么FxCop建议您应该指定IFormatProvider参数。
如果您关心应用程序中的本地化(全球化),它尤其有用。也就是说,如果你希望你的应用支持多种语言和文化特定格式,那么你应该使用它。
不,您不需要指定文化,除非您的字符串包含文化特定元素,例如小数点分隔符,货币等,必须根据文化进行渲染。
如果您未指定IFormatProvider
(或等效地通过null
),则大多数参数类型最终都会根据CultureInfo.CurrentCulture
进行格式化。有趣的是,你可以指定一个自定义的IFormatProvider
,它可以在格式化参数时获得第一个裂缝,也可以根据其他上下文重写格式化文化。
请注意,CultureInfo.CurrentCulture
影响参数格式,而不是资源选择;资源选择由CultureInfo.CurrentUICulture
控制。
如何定义自定义IFormatProvider - http://www.csharp-examples.net/custom-iformatprovider/ – 2011-02-03 16:41:32