根据标题,你使用什么字符串比较方法以及为什么使用它?
你没有指定平台,但我猜测是.NET。我强烈建议你使用后一种形式——因为大小写比较并不像你所预期的那样简单。(这也避免了创建额外的字符串,但那是另一回事。)
例如,当在土耳其运行时,当你的代码面对"mail"和"MAIL"时,你想让你的代码做什么?如果你使用ToLower
,它将返回false;如果你使用CurrentCultureIgnoreCase
,它也会返回false;但如果你使用InvariantCultureIgnoreCase
,它将返回true。你需要考虑数据的来源和你尝试用它来实现什么。
有关更多信息和指导,请参见MSDN中有关使用字符串的建议。
除此之外,我认为后一种表达方式更有效地表达了你的意图。你实际上并不关心字符串的小写值——你关心以一种不区分大小写的方式相等性……而这正是第二种形式所表达的。
Equals
调用比较高效,因为它只涉及一次字符串操作,而不是三次。StringComparison.OrdinalIgnoreCase
选项可以获得最佳的不区分大小写比较性能。然而,由于它不考虑文化差异,可能不总是给出您想要的结果。ToUpper
而不是 ToLower
。某些奇特的字母无法正确地从大写转换为小写,但从小写转换为大写则有效。==
运算符看来,这似乎是 C#。如果您使用 VB,则应注意 =
运算符不使用字符串类的等式运算符,而是 VB 自己的逻辑进行比较,略有不同。我觉得用第二个比第一个更好。因为第二种类型支持所有语言,使用起来更方便。
基准测试:
方法 | 平均值 | 误差 | 标准偏差 | Gen0 | 分配的内存 |
---|---|---|---|---|---|
ToLower | 47.653 纳秒 | 2.0118 纳秒 | 0.1103 纳秒 | 0.0127 | 80 字节 |
OrdinalIgnoreCase | 7.432 纳秒 | 0.1664 纳秒 | 0.0091 纳秒 | - | - |