C#中ToUpper()和ToUpperInvariant()的区别原创
金蝶云社区-抚琴弹唱
抚琴弹唱
3人赞赏了该文章 511次浏览 未经作者许可,禁止转载编辑于2021年11月26日 12:10:34

世界分为若干个文化和区域,RFC 1766 定义了文化的名称,这些名称根据语言和国家或区域的不同在世界各地使用。

例如en-AU、en-CA、en-GB和en-US分别用于表示澳大利亚、加拿大、英国和美国的英语。

不同的文化和区域有很大差异,比如阿拉伯语从右往左显示。

ToUpper() 就是按CurrentCulture把所有字母转换为大写。

ToUpperInvariant() 使用固定区域性的大小写规则。固定区域性表示不区分区域性。 它与英语语言关联,但不与任何国家/地区关联。

《CLR via C#》, 其中有一个章节讲String类型。

当进行不区分大小写的字符串对比时,应当尽量多的使用ToUpperInvariant,因为一方面CLR对转换为大写的操作进行了专门的优化,使其性能更加卓越;另一方面ToUpperInvariant和ToLowerInvariant忽略了对语言文化的处理,因此性能比ToUpper和ToLower要快得多。

请参见 使用 InvariantCulture 属性。


金蝶云星空中对字符串的处理推荐使用:

将StringComparison.CurrentCultureIgnoreCase改成StringComparison.OrdinalIgnoreCase

将StringComparer.CurrentCultureIgnoreCase改成StringComparer.OrdinalIgnoreCase

将.ToUpper()方法代码替换成.ToUpperInvariant()

将.ToLower()方法改成.ToLowerInvariant()


赞 3