使用InvariantCultureIgnoreCase而不是ToUpper进行不区分大小写的字符串比较

时间:2010-02-13 04:21:21

标签: c# .net string comparison case-insensitive

this page,评论者写道:

不要使用.ToUpper来确保比较字符串不区分大小写。

而不是:

type.Name.ToUpper() == (controllerName.ToUpper() + "Controller".ToUpper())) 

这样做:

type.Name.Equals(controllerName + "Controller", 
     StringComparison.InvariantCultureIgnoreCase)

为什么这种方式首选?

2 个答案:

答案 0 :(得分:17)

以下是详细答案。The Turkey Test阅读部分 3

  

正如许多人所讨论的那样   人们,土耳其语中的“我”表现得很好   与大多数语言不同。   按照Unicode标准,我们的   小写“i”变为“İ”(U + 0130   “拉丁大写字母I带点   当它移动到大写时“上方”。   同样,我们的大写“我”变成了   “ı”(U + 0131“拉丁文小写字母   无点我“)当它移动到   小写。

     

修复:再次使用序数(原始字节)   比较,或不变的文化   比较,除非你绝对需要   基于文化的语言学   比较(给你大写   我在土耳其有点?

根据微软的说法,你甚至不应该使用Invariant ......而是Ordinal ......( New Recommendations for Using Strings in Microsoft .NET 2.0

答案 1 :(得分:8)

简而言之,它通过CLR进行了优化(内存也更少)。

此外,如果性能很小,那么大写比较比ToLower()更优化。

在回答您的示例时,有一个faster way yet

String.Equals(type.Name, controllerName + "Controller", 
              StringComparison.InvariantCultureIgnoreCase);