"Equals"和"SequenceEqual"之间的区别?

Clo*_*ble 12 linq comparison equality list equals

是否有任何情况:

Equals(MyList1, MyList2) != MyList1.SequenceEqual(MyList2);
Run Code Online (Sandbox Code Playgroud)

有什么区别:

Equals(obj1, obj2)obj1.Equals(obj2)

谢谢.

Dan*_*rth 23

Equalstrue仅当MyList1MyList2是同一实例时才返回.如果两个列表包含相同的项,则
SequenceEqual返回true

例:

var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<int> { 1, 2, 3 };
var list3 = list1;
var list4 = new List<int> { 1, 2, 3, 4 };

Equals(list1, list2) == false
list1.SequenceEqual(list2) == true

Equals(list1, list3) == true
list1.SequenceEqual(list3) == true

Equals(list1, list4) == false
list1.SequenceEqual(list4) == false
Run Code Online (Sandbox Code Playgroud)

Equals(obj1, obj2)和之间的区别在于obj1.Equals(obj2)第一个使用静态方法Object.Equals而第二个使用实例方法Equals.如果obj1覆盖类,这两个调用的结果将有所不同Object.Equals.


Hab*_*bib 5

对于问题的第二部分,第一部分已由@Daniel 回答:

Equals(obj1, obj2) and obj1.Equals(obj2)
Run Code Online (Sandbox Code Playgroud)

obj1.Equals(obj2) 是对象的实例方法,如果 obj1 为 null,则会抛出异常。其中 Equals(obj1,obj2) 是静态方法,如果 obj1 为 null,则该方法将起作用。您还可以覆盖类的Euqals

object obj1 = new object();
object obj2 = new object();
Console.WriteLine(obj1.Equals(obj2)); //print false
obj1 = null;
Console.WriteLine(obj1.Equals(obj2)); // will throw exception
Console.WriteLine(Equals(obj1, obj2));// return false in this case and since its static it will not throw the exception
Run Code Online (Sandbox Code Playgroud)