私は[OK]を、開始することができますEqualityComparer <T>。重大な誤解?
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;
}
}
(また、Object.Equals
メソッドをオーバーライド今のGetHashCodeメソッド()メソッドを無視することができます)、それはIEquatable<Person>
からのEquals()メソッドを実装して、クラスPerson
を持っている:
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);
私はこのPを理解し、問題を持っている:
は、この行についての話をしますアート:
EqualityComparer<Person>.Default
私はクラスがIEquatable
を実施している場合EqualityComparer<Person>.Default
がチェックすることを聞いた - それはEquals(object obj)
Equals(Person other)
方法を取っていないだろう。 それは(それがIEquatableを実装しているため)Equals(Person other)
は、私たちがどのようなボクシングを話しているので、または EqualityComparer<Person>.Default
ずに
をを実行しますボクシング
しかし
を回避するという利点を持っています?そこにない!
ときEquals(object obj)
を実行することだけです:私はプログラマーだ
bool b = lst1.SequenceEqual(lst2,EqualityComparer<Object>.Default);
しかし!私は決してobject
を送るときには実際にはPerson
!
私には何が欠けていますか?私はEqualityComparer<Object>.Default
の利益を理解することに問題があります。誰か私に間違っていると私に証明するための例を教えてもらえますか?
あなたは何を理解していませんか? 'IEqualityComparer
なぜそれが動作するかどうか、なぜそれは
と呼ぶべき理由がありますか?ボクシングは値のタイプに対してのみ起こります。 'Person'は参照型なので、この場合はボクシングはありません。 – thecoop