Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在String.Format()中确实需要CultureInfo.CurrentCulture吗?_C#_.net_Culture_String.format - Fatal编程技术网

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-如果对象是字符串,区域性是否会产生影响?(与设置日期时间之类的格式相反)