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

在这个页面上 ,一位评论者写道:

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

而不是这个:

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

做这个:

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

为什么这种方式更受欢迎?

以下是详细答案。 土耳其测试 ( 阅读第3部分

正如很多人所讨论的那样,土耳其语中的“我”与大多数语言的行为不同。 根据Unicode标准,当它移动到大写时,我们的小写“i”变为“İ”(U + 0130“Latin Capital Letter I With Dot Above”)。 同样,当它移动到小写时,我们的大写“I”变成“ı”(U + 0131“Latin Small Letter Dotless I”)。

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

根据微软的说法,你甚至不应该使用Invariant ……而是Ordinal …( 在Microsoft .NET 2.0中使用字符串的新建议

简而言之,它由CLR优化(内存也更少)。

此外,如果这种微小的性能很重要,则大写比较比ToLower()更优化。

为了回应您的示例,还有一种更快的方法 :

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