次の方法で共有


Visual Studio で Equals メソッドと GetHashCode メソッドのオーバーライドを生成する

このコード生成は、以下に適用されます。

  • C#

何:Equals メソッドと GetHashCode メソッドを生成できます。

いつ: メモリ内のオブジェクトの場所ではなく、1 つ以上のフィールドで比較する必要がある型がある場合に、これらのオーバーライドを生成します。

なぜでしょうか:

  • 値型を実装する場合は、 Equals メソッドのオーバーライドを検討する必要があります。 この場合、ValueType の Equals メソッドの既定の実装よりもパフォーマンスを向上させることができます。

  • 参照型を実装する場合は、型が Point、String、BigNumber などの基本型のように見える場合は、 Equals メソッドをオーバーライドすることを検討する必要があります。

  • GetHashCode メソッドをオーバーライドして、ハッシュ テーブルで型が正しく機能するようにします。 等値演算子に関するガイダンスを参照してください。

使い方

  1. 型宣言の行のどこかにカーソルを置きます。

    public class ImaginaryNumber
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    }
    

    コードは次のスクリーンショットのようになります。

    生成されたメソッドを適用する強調表示されたコードのスクリーンショット

    ヒント

    型名をダブルクリックしないか、メニュー オプションを使用できません。 行のどこかにカーソルを置くだけです。

  2. 次に、次のいずれかのアクションを選択します。

    • Ctrl+. を押して、クイック アクションとリファクタリング メニューをトリガーします。

    • 右クリックして [クイック アクションとリファクタリング ] メニューを選択します。

    • 左側 の余白に表示される Visual Studio アイコンのクイック アクション ドライバー アイコンのスクリーンショット をクリックします。

  3. ドロップダウン メニューの [ Generate Equals(object)] または [ Generate Equals and GetHashCode]\(等しいと GetHashCode の生成\) を選択します。

    [オーバーライドの生成] ドロップダウン メニューのスクリーンショット

  4. [ メンバーの選択 ] ダイアログ ボックスで、メソッドを生成するメンバーを選択します。

    [オーバーライドの生成] ダイアログ

    ヒント

    ダイアログの下部にあるチェック ボックスを使用して、このダイアログから演算子を生成することもできます。

    EqualsメソッドとGetHashCode メソッドは、次のコードに示すように、既定の実装で生成されます。

    public class ImaginaryNumber : IEquatable<ImaginaryNumber>
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    
        public override bool Equals(object obj)
        {
            return Equals(obj as ImaginaryNumber);
        }
    
        public bool Equals(ImaginaryNumber other)
        {
            return other != null &&
                   RealNumber == other.RealNumber &&
                   ImaginaryUnit == other.ImaginaryUnit;
        }
    
        public override int GetHashCode()
        {
            return HashCode.Combine(RealNumber, ImaginaryUnit);
        }
    }
    

    コードは次のスクリーンショットのようになります。

    生成されたメソッドの結果のスクリーンショット

こちらも参照ください