4

<T>次のように、List をプロパティとして持つカスタム クラスに IEquatable を実装しています。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<string> Dislikes;

    public bool Equals(Person p)
    {
        if (p == null)
        {
            return false;
        }
        if (object.ReferenceEquals(this, p))
        {
            return true;
        }

        return this.FirstName == p.FirstName 
            && this.LastName == p.LastName
            && this.Dislikes == p.Dislikes; //or this.Dislikes.Equals(p.Dislikes)
    }

    public override int GetHashCode()
    {
        int hash = 17;
        hash = hash * 23 + (this.FirstName ?? String.Empty).GetHashCode();
        hash = hash * 23 + (this.LastName ?? String.Empty).GetHashCode();
        hash = hash * 23 + this.Dislikes.GetHashCode();
        return hash;
    }
}

Equals メソッドと GetHashCode メソッドを実装しようとしているときに List が気になります。具体的には、 List <T>.Equals はその内容の等価性を評価しますか? 同様に List <T>.GetHashCode?

4

1 に答える 1

11

いいえ .Equals は参照比較を行うだけで、GetHashCode はオブジェクトごとに割り当てられた標準コードを返します。

リストの内容に基づいて .Equals を実行したい場合は、ハッシュ コードを生成する場合と同様に、自分で列挙する必要があります。

于 2010-01-14T23:12:56.640 に答える