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

Comparing two strings, ignoring case in C#

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is difference between different string compare methods

以下哪一个更有效?(或者还有更好的第三种选择吗?)

1
2
3
string val ="AStringValue";

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

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


如果你在寻找效率,请使用:

1
string.Equals(val,"astringvalue", StringComparison.OrdinalIgnoreCase)

顺序比较比文化感知的比较快得多。

但是,如果您对同一字符串进行了大量比较,那么ToLowerCase可能是更好的选择。

与任何性能优化一样:测量它,然后决定!


第一个是正确的,imho是更有效的,因为第二个"解决方案"实例化了一个新的字符串实例。


.ToLowerCase版本不会更快,它需要额外的字符串分配(以后必须收集)等。

我个人会用

1
string.Equals(val,"astringvalue",  StringComparison.OrdinalIgnoreCase)

这避免了文化敏感字符串的所有问题,但因此它避免了文化敏感字符串的所有问题。只有你知道在你的语境中这是否合适。

使用String.Equals静态方法可以避免valnull的任何问题。


对于这种关于"效率"的问题,我的一般答案几乎总是,代码的任何版本都是可读性最高的,也是最有效的。

尽管如此,我认为大多数人一眼就能理解(val.ToLowerCase() =="astringvalue")

我提到的效率不是执行代码所必需的,而是有关代码的维护和一般的可读性。


我敢打赌,最安全的方法是使用String.Equals来减轻val是null的可能性。


前者是最快的。原来val是不可变的,所以用string.tolowercase()创建了一个新的string对象,而不仅仅是直接与字符串比较器进行比较。如果您一秒钟要做很多次,那么创建一个新的字符串对象可能会很昂贵。


你也可以看看已经回答的问题。C中字符串比较方法的差异#


第一个更有效(也是最好的选择),因为val.ToLowerCase()创建了一个新对象,因为字符串是不可变的。