假设我有两个字符串:a和b.为了比较a和被忽略大小写时是否具有相同的值,我总是使用:
// (Assume a and b have been verified not to be null) if (a.ToLower() == b.ToLower())
但是,使用Reflector,我在.NET Framework中已经看过几次:
// (arg three is ignoreCase) if (string.Compare(a, b, true) == 0)
我测试哪个更快,每次用我使用的字符串ToLower()
节拍Compare()
.
是否有理由Compare()
而不是ToLower()
?有什么不同的CultureInfo
?我在挠头.
您应该关注的主要问题不是性能,它是正确性,从这个方面来说,您可能希望用于不区分大小写的比较的方法是:
string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0;
要么
a.Equals(b, StringComparison.OrdinalIgnoreCase)
(如果你知道字符串可能为null,那么第一个是有用的;如果你已经知道至少有一个字符串是非null的话,后者更容易编写.我从未测试过性能但是假设它会相似.)
Ordinal
或者OrdinalIgnoreCase
是一个安全的赌注,除非你知道你想使用另一种比较方法; 获取做出决定所需的信息在MSDN上阅读本文.
MSDN文章的备注部分应该解释一下.从本质上讲,原因是不同文化背景下的兼容性.