我有一个类Person
,它实现了 Equals() 方法IEquatable<Person>
(也覆盖Object.Equals
了方法,现在让我们忽略 GetHashcode() 方法)
class Person : IEquatable<Person>
{
public string Name { get; set; }
public bool Equals(Person other)
{
return this.Name == other.Name;
}
public override bool Equals(object obj)
{
var person = obj as Person;
return person != null && person.Name == Name;
}
}
好的,让我们开始:
Person p1 = new Person() { Name = "a" };
Person p2 = new Person() { Name = "a" };
List<Person> lst1 = new List<Person>() { p1 };
List<Person> lst2 = new List<Person>() { p2 };
让我们谈谈这一行:
bool b = lst1.SequenceEqual(lst2, EqualityComparer<Person>.Default);
我在理解这部分时遇到问题:
EqualityComparer<Person>.Default
我听说这EqualityComparer<Person>.Default
将检查该类是否正在实现IEquatable
-它将采用Equals(Person other)
Method 而不是Equals(object obj)
. 它的优点是避免拳击
但
将Equals(Person other)
运行或不 EqualityComparer<Person>.Default
运行
(因为它正在实现 IEquatable)
那么我们在谈论什么拳击?没有!
唯一 Equals(object obj)
会运行的时间是:
bool b = lst1.SequenceEqual(lst2,EqualityComparer<Object>.Default);
但我是程序员!object
当它实际上是一个时,我永远不会发送一个Person
!
我错过了什么?我无法理解EqualityComparer<Object>.Default
. 有人可以给我一个例子来证明我错了吗?