標準的なSystem.Object.Equals()のオーバーライド実装

public class Foo : IEquatable<Foo>
{
    public override bool Equals(object right)
    {
        //nullチェック
        if (Object.ReferenceEquals(right, null))
            return false;

        if (Object.ReferenceEquals(this, right))
            return true;

        if (this.GetType() != right.GetType())
            return false;

        return this.Equals(right as Foo);
    }

    #region IEquatable<Foo> メンバー
    public bool Equals(Foo other)
    {
        //省略
        return true;
    }
    #endregion
  • 例外を発生させない
  • GetType()で型を比較する
  • IEquatableを実装する
  • 親クラスがObjectまたはValueTypeでない場合は親クラスのEquals()を呼ぶ
  • GetHashCode()をオーバーライドする
  • 値型の場合は、==演算子もオーバーライドする※参照型の場合は基本的に不要