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要快得多。
金蝶云星空中对字符串的处理推荐使用:
将StringComparison.CurrentCultureIgnoreCase改成StringComparison.OrdinalIgnoreCase
将StringComparer.CurrentCultureIgnoreCase改成StringComparer.OrdinalIgnoreCase
将.ToUpper()方法代码替换成.ToUpperInvariant()
将.ToLower()方法改成.ToLowerInvariant()
推荐阅读