当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《CultureInfo.CurrentCulture在String.Format()中是否真的必要?》经验,为你挑选了3个好方法。

您如何认为提供IFormatProvider方法确实是必要的String.Format(string, object)

编写完整变体是否更好

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

要不就

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



1> Joe..:

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

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

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

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



2> Jeffrey Hant..:

如果你没有指定IFormatProvider(或等效传递null),那么大多数参数类型最终会根据而被格式化CultureInfo.CurrentCulture.有趣的是,您可以指定一个自定义IFormatProvider,可以在格式化参数时获得第一个破解,或者根据其他上下文覆盖格式化文化.

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


如何定义自定义IFormatProvider - http://www.csharp-examples.net/custom-iformatprovider/
如果对象是一个字符串,那么文化会有什么不同之处呢?(与格式化DateTime之类的东西相反)

3> Spikolynn..:

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有