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
Equals
true
仅当MyList1
且MyList2
是同一实例时才返回.如果两个列表包含相同的项,则
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
.
对于问题的第二部分,第一部分已由@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)