IEqualityComparer
is not equal
、 equal はオブジェクト(インスタンスメソッド)用ですが、 EqualityComparer は装飾用です。たとえば、特定の区別をしたいlinqでは:
personList.OrderBy(p=>p.ID).Distinct(new MyEqualityComparer())
と
class MyEqualityComparer: IEqualityComparer<Person>
{
public bool Equals(Person p1, Person p2)
{
if (p1.Age == p2.Age)
return true;
return false;
}
public int GetHashCode(Person p)
{
return p.Id.GetHashCode();
}
}
しかし、等しいのは人です:
public class Person
{
public int ID{get;set;}
public int Age{get;set;}
public override bool Equals(object o)
{
//do stuff
}
}
IEqualityComparer で任意の数の装飾を行うことができますが、インスタンス メソッドでこれを行うことはできません ( personList.Distinct(new AnotherComparer) を書くことができます...)