15

此页面上,评论者写道:

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

而不是这个:

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

做这个:

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

为什么首选这种方式?

4

2 回答 2

18

这是详细的答案..火鸡测试阅读第3节)

正如很多人所讨论的那样,土耳其语中的“我”的行为与大多数语言中的不同。根据 Unicode 标准,我们的小写“i”在变为大写时变为“İ”(U+0130“拉丁大写字母 I,上面带有点”)。类似地,我们的大写“I”在变为小写时变为“ı”(U+0131“Latin Small Letter Dotless I”)。

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

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

于 2010-02-13T04:37:55.843 回答
8

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

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

针对您的示例,还有一种更快的方法

String.Equals(type.Name, controllerName + "Controller", 
              StringComparison.InvariantCultureIgnoreCase);
于 2010-02-13T04:32:12.160 回答