比较两个string,在C#中忽略大小写

可能重复:
不同的string比较方法有什么区别

以下哪两项更有效率? (或者也许还有第三个select,更好呢?)

string val = "AStringValue"; if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase)) 

要么

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

第一个是正确的,因为第二个“解决scheme”实例化一个新的string实例,所以它更有效率。

如果你正在寻找效率,使用这个:

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

序数比较可以比文化意识比较快得多。

ToLowerCase如果您要对同一个string进行大量比较, ToLowerCase可能是更好的select。

如同任何性能优化: 衡量它,然后决定!

.ToLowerCase版本不会更快 – 它涉及到一个额外的string分配(以后必须收集)等。

就我个人而言,我会用

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

这避免了文化敏感string的所有问题,因此避免了文化敏感string的所有问题 。 只有你知道在你的情况下是否可以。

使用string.Equals静态方法避免了valnull任何问题。

对于这种“效率”这个问题,我的一般答案几乎总是最有效的,哪种版本的代码是最可读的。

这就是说,我认为(val.ToLowerCase() == "astringvalue")是大多数人一眼就可以理解的。

我所提到的效率并不是在代码的执行中必不可less的,而是在于代码的维护和普遍的可读性。

String.Equals ,最安全的是使用String.Equals来缓解val为null的可能性。

前者是最快的。 结果是val是不可变的,所以用String.ToLowerCase()创build一个新的string对象,而不是直接与string比较器进行比较。 如果你每秒钟做这么多次,那么创build一个新的string对象可能是很昂贵的。

1st是更高效的(也是最好的select),因为val.ToLowerCase()创build一个新的对象,因为string是不可变的。

你可能也想看看已经回答的问题C#中string比较方法的区别