在c#中比较字符串是非常简单的。事实上有几种方法可以做到这一点。我在下面列出了一些。我好奇的是它们之间的区别,以及什么时候应该使用其中一种?是否应该不惜一切代价避免?还有其他我没有列出的吗?
string testString = "Test";
string anotherString = "Another";
if (testString.CompareTo(anotherString) == 0) {}
if (testString.Equals(anotherString)) {}
if (testString == anotherString) {}
(注:我在这个例子中寻找平等,不小于或大于,但也可以自由评论)
如果你对BCL方法的差异感到好奇,Reflector是你的朋友:-)
我遵循以下准则:
精确匹配:编辑:我以前总是使用==操作符,原则是在Equals(string, string)中使用对象==操作符来比较对象引用,但似乎str .Equals(strB)总体上仍然比string快1-11%。= (strA, strB), strA == strB,和string。CompareOrdinal(箍,strB)。我用一个秒表对被拘禁/非被拘禁的字符串值进行循环测试,具有相同/不同的字符串长度,以及不同的大小(1B到5MB)。
strA.Equals(strB)
人类可读匹配(西方文化,不区分大小写):
string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0
人类可读匹配(CultureInfo定义的所有其他区域性,不敏感的大小写/重音/假名/等):
string.Compare(strA, strB, myCultureInfo) == 0
人类可读的自定义规则匹配(所有其他区域性):
CompareOptions compareOptions = CompareOptions.IgnoreCase
| CompareOptions.IgnoreWidth
| CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0