可能重复:
What is difference between different string compare methods
以下哪两种更有效? (或许还有第三种选择更好吗?)
string val = "AStringValue";
if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))
OR
if (val.ToLowerCase() == "astringvalue")
答案 0 :(得分:233)
如果您正在寻找效率,请使用:
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
序数比较可以比文化感知比较快得多。
但是,如果你对同一个字符串做了很多比较, ToLowerCase
可能是更好的选择。
与任何性能优化一样:测量它,然后决定!
答案 1 :(得分:150)
第一个是正确的,恕我直言的效率更高,因为第二个“解决方案”实例化一个新的字符串实例。
答案 2 :(得分:29)
.ToLowerCase
版本不会更快 - 它涉及额外的字符串分配
(后来必须收集),等等。
就个人而言,我会使用
string.Equals(val, "astringvalue", StringComparison.OrdinalIgnoreCase)
这避免了文化敏感字符串的所有问题,但结果它避免了文化敏感字符串的所有问题。只有你知道在你的背景下是否可以。
使用string.Equals
静态方法可以避免val
null
出现任何问题。
答案 3 :(得分:11)
我对“效率”这类问题的一般回答几乎总是如此,其中任何版本的代码都是最易读的,效率最高。
话虽如此,我认为大多数人一眼就能理解(val.ToLowerCase() == "astringvalue")
。
我所指的效率并不是代码执行中的必要条件,而是代码的维护和一般可读性。
答案 4 :(得分:6)
我敢说最安全的是使用String.Equals
来减轻val为null
的可能性。
答案 5 :(得分:4)
前者是最快的。事实证明val
是不可变的,因此使用String.ToLowerCase()创建一个新的字符串对象,而不是直接与字符串比较器进行比较。如果你每秒多次这样做,那么创建一个新的字符串对象可能会很昂贵。
答案 6 :(得分:2)
1st更有效(并且是最好的选项)因为val.ToLowerCase()
创建了一个新对象,因为字符串是不可变的。
答案 7 :(得分:2)
您可能还想查看已经回答的问题 Differences in string compare methods in C#