C# 在String.Format()中确实需要CultureInfo.CurrentCulture吗?
您认为在方法C# 在String.Format()中确实需要CultureInfo.CurrentCulture吗?,c#,.net,culture,string.format,C#,.net,Culture,String.format,您认为在方法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);
?如果您关心应用程序中的本地化(全球化),那么它尤其有用。也就是说,如果您希望您的应用程序支持多种语言和特定于区域性的格式,那么您应该使用这些格式。否,您不需要指定区域性,除非您的字符串包含特定于区域性的元素,如十进制分隔符、货币等。,必须根据区域性进行呈现。如果不指定
IFormatProvider
(或等效地传递null
),大多数参数类型最终将根据CultureInfo.CurrentCulture
进行格式化。有趣的是,您可以指定一个自定义的IFormatProvider
,它可以在格式化参数时获得第一个破解,或者根据其他上下文重写格式化区域性
请注意,
CultureInfo.CurrentCulture
影响参数格式,而不是资源选择;资源选择由CultureInfo.CurrentUICulture
控制。通常,如果要以独立于当前用户区域性的方式(例如在注册表或文件中)持久化生成的字符串,则需要使用不变量区域性
您将希望对将在UI中呈现给当前用户的字符串(表单、报表)使用CurrentCulture
如果您在应该使用不变量文化的地方使用CurrentCulture,则可能会出现细微的错误:只有当具有不同文化背景的多个用户访问同一注册表项或文件时,或者当用户更改其默认文化背景时,才会发现这些错误
显式指定CurrentCulture(如果省略了IFormatProvider参数,则为默认值)本质上是一个文档,它表明您已经考虑了上述内容,并且生成的字符串应该使用当前用户的区域性。这就是FxCop建议您指定IFormatProvider参数的原因。如何定义自定义IFormatProvider-如果对象是字符串,区域性是否会产生影响?(与设置日期时间之类的格式相反)