C#中字符串比较方法的区别

284

C#中比较字符串非常简单。实际上,有几种方法可以做到这一点。我在下面的块中列出了一些。我很好奇它们之间的区别以及在何时应该使用其中之一?是否应该尽可能避免其中一种方法?还有更多我没有列出来的方法吗?

string testString = "Test";
string anotherString = "Another";

if (testString.CompareTo(anotherString) == 0) {}
if (testString.Equals(anotherString)) {}
if (testString == anotherString) {}

(注意:在此示例中,我寻求平等而非小于或大于,但您也可以随意评论)


5
一个陷阱是你不能调用 stringValue.Equals(null),因为这将假定你可以在 null 上调用方法。 - johnc
1
MSDN 参考文献 - Robert Harvey
1
@RobertHarvey 我来到Stack Overflow的原因是为了不必阅读多个页面以获取答案。 - Syaiful Nizam Yahya
@Syaiful:我来到Stack Overflow的原因是寻找那些文档中没有的答案。 - Robert Harvey
11个回答

-9

使用.Equals时,您还可以获得字符串比较选项。非常方便,可以忽略大小写等其他事项。

顺便提一下,这将评估为false

string a = "myString";
string b = "myString";

return a==b

由于 == 比较的是 a 和 b(指针)的值,只有当指针指向内存中的同一对象时才会评估为 true。.Equals 对指针进行解引用并比较指针存储的值。在这里,a.Equals(b) 将为 true。

如果您将 b 更改为:

b = "MYSTRING";

那么 a.Equals(b) 就是 false,但是

a.Equals(b, StringComparison.OrdinalIgnoreCase) 

会是真的

a.CompareTo(b) 调用字符串的 CompareTo 函数,比较指针处的值,并返回 <0 如果存储在 a 中的值小于存储在 b 中的值,则返回 0 如果 a.Equals(b) 为 true,否则返回 >0。然而,这是区分大小写的,我认为可能有选项可以让 CompareTo 忽略大小写等,但现在没有时间查看。正如其他人已经指出的那样,这将用于排序。以这种方式进行相等比较将导致不必要的开销。

我确定我漏掉了一些东西,但我认为这应该足够的信息来开始实验,如果您需要更多细节。


9
"a==b" 部分是不正确的。"==" 运算符在 String 类中被有效地重载,它比较值而不考虑实际引用。 - Goyuix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接