在this page,评论者写道:
不要使用.ToUpper
来确保比较字符串不区分大小写。
而不是:
type.Name.ToUpper() == (controllerName.ToUpper() + "Controller".ToUpper()))
这样做:
type.Name.Equals(controllerName + "Controller",
StringComparison.InvariantCultureIgnoreCase)
为什么这种方式首选?
答案 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);