比较两个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
静态方法避免了val
为null
任何问题。
对于这种“效率”这个问题,我的一般答案几乎总是最有效的,哪种版本的代码是最可读的。
这就是说,我认为(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比较方法的区别