比较两个字符串,忽略C#中的大小写

时间:2011-06-16 11:34:46

标签: c# string comparison equals

  

可能重复:
  What is difference between different string compare methods

以下哪两种更有效? (或许还有第三种选择更好吗?)

string val = "AStringValue";

if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase))

OR

if (val.ToLowerCase() == "astringvalue")

8 个答案:

答案 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#