C#:CompareTo(String)和Equals(String)有什么区别?

我想知道,在C#中比较字符串时? 哪种方法适合使用,为什么?

CompareTo()Equals()

来自MSDN :

string.CompareTo

将此实例与指定的对象或String进行比较,并返回一个整数,该整数指示此实例是否在排序顺序中与指定对象或字符串相同的位置之前,之后或出现。

string.Equals

确定两个String对象是否具有相同的值。

简而言之, CompareTo用于排序。 Equals用于确定平等。

CompareTo()告诉你哪一个,以及一个是否大于/小于另一个,而Equals()只是告诉你它们是否是等价的值。

如果您只想知道“它们是否是相同的值”,则使用Equals() 。 如果您还需要知道它们的比较方式,请使用CompareTo()

 int a = 50; int b = 10; //if you need to know if they are equal: if(a.Equals(b)){ //won't execute } //this would check if they are equal, as well if(a.CompareTo(b) == 0){ //won't execute } //if you need to know if a is bigger than b, specifically: if(a.CompareTo(b) > 0){ //will execute } //this would check to see if a is less than b if(a.CompareTo(b) < 0){ //won't execute } 

最后,请注意,对于像int这样的基本类型,并不严格需要这些Equals()CompareTo()方法,因为标准比较运算符是重载的,所以你可以这样做:

 //this would check if they are equal, as well if(a == b){ //won't execute } //if you need to know if a is bigger than b, specifically: if(a > b){ //will execute } //this would check to see if a is less than b if(a < b){ //won't execute } 

最后,你在问题中提到了stringEquals()CompareTo()工作正如我对string所描述的那样。 请记住, CompareTo()对字符串的'比较'是基于字母排序的,所以"abcdefg" < "z"

CompareTo的function实际上是Equalsfunction的超集。 CompareTo函数指示在Equals函数仅指示相等性之前,之后或等于的排序。 因此,实际上可以用CompareTo定义Equals

 public bool Equals(string other) { return 0 == CompareTo(other); } 

Equals将返回相等的布尔值。

CompareTo将返回一个int,其中-1(或任何其他负值)表示“小于”,0表示“等于”,或1(或任何其他正值)表示“大于”。 此方法对于排序算法很有用。

CompareTo方法是将对象的实例与String对象的参数进行比较。 Equals方法确定两者的值是否相同。

比较两个对象的值时应使用CompareTo。

 String str1 = "abc"; String str2 = "def" if(strq.CompareTo(str2) // 

当其中一个或两个不是对象时,应使用等于。

 string str1 = "abc"; if(str1.Equals("abc") // 

如果对正常值类型变量使用CompareTo方法,它将使用类型转换(装箱),这是不必要的。

平等可以比比较“更苛刻”,但反之亦然。 CompareTo可以说“所有对象都是平等的”,而Equals说“但有些人比其他人更平等!”

一个例子是System.String。 String的Equals方法和==运算符使用序数比较,它比较每个字符的Unicode点值。 然而,它的CompareTo方法使用了一种不那么繁琐的文化依赖性比较。 例如,在大多数计算机上,字符串“ṻ”和“ǖ”根据Equals不同,但根据CompareTo相同。

简而言之,这来自C#