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

Rob*_*vey 14 .net c# string comparison case-insensitive

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

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

而不是这个:

type.Name.ToUpper() == (controllerName.ToUpper() + "Controller".ToUpper())) 
Run Code Online (Sandbox Code Playgroud)

做这个:

type.Name.Equals(controllerName + "Controller", 
     StringComparison.InvariantCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

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

Gab*_*oli 17

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

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

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

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

  • 谢谢......我怀疑这样的事情.当人们说你必须以某种方式做某事时,这是令人恼火的,但他们没有说为什么. (5认同)

Nic*_*ver 8

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

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

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

String.Equals(type.Name, controllerName + "Controller", 
              StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)