我想知道,在比较C#中的字符串时?哪种方法适合使用?为什么?
CompareTo()
或Equals()
?
答案 0 :(得分:18)
来自MSDN:
<强> string.CompareTo 强>:
将此实例与指定的对象或String进行比较并返回 一个整数,指示此实例是先于,后跟还是 出现在排序顺序中与指定对象相同的位置 或字符串。
<强> string.Equals 强>:
确定两个String对象是否具有相同的值。
简而言之,CompareTo
用于排序。 Equals
用于确定相等。
答案 1 :(得分:15)
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
}
最后请注意,Equals()
等原始类型并不严格需要这些CompareTo()
和int
方法,因为标准比较运算符已经过载,因此您可以执行以下操作:
//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
}
最后,您在提问时提到了string
。 Equals()
和CompareTo()
工作正如我对string
所描述的那样。请记住,CompareTo()
对字符串的“比较”基于字母排序,因此"abcdefg" < "z"
答案 2 :(得分:5)
CompareTo
中的功能实际上是Equals
功能的超集。 CompareTo
函数指示在Equals
函数仅指示相等性之前,之后或等于的排序。因此,实际上可以根据Equals
CompareTo
public bool Equals(string other) {
return 0 == CompareTo(other);
}
答案 3 :(得分:4)
Equals
将返回相等的布尔值。
CompareTo
将返回一个int,其中-1(或任何其他负值)表示“小于”,0表示“等于”,或1(或任何其他正值)表示“大于”。此方法对于排序算法很有用。
答案 4 :(得分:0)
平等可以比比较“更加苛刻”,但反之亦然。 比较可以说“所有对象都是平等的” 虽然Equals说“但有些人比其他人更平等!”
这样的一个例子是System.String。 String的Equals方法和==运算符 使用序数比较,它比较每个字符的Unicode点值。 然而,它的CompareTo方法使用了一种不那么繁琐的文化依赖比较。上 大多数计算机,例如,字符串“ṻ”和“ǖ”根据不同而不同 等于,但根据CompareTo相同。
答案 5 :(得分:-1)
CompareTo方法是将对象的实例与String对象的参数进行比较。 Equals方法确定两者的值是否相同。
比较两个对象的值时应使用CompareTo。
String str1 = "abc";
String str2 = "def"
if(strq.CompareTo(str2) //
当其中一个或两个都不是对象时,应使用等于。
string str1 = "abc";
if(str1.Equals("abc") //
如果对正常值类型变量使用CompareTo方法,它将使用类型转换(装箱),这是不必要的。