このコード生成は、以下に適用されます。
- C#
何:Equals メソッドと GetHashCode メソッドを生成できます。
いつ: メモリ内のオブジェクトの場所ではなく、1 つ以上のフィールドで比較する必要がある型がある場合に、これらのオーバーライドを生成します。
なぜでしょうか:
値型を実装する場合は、 Equals メソッドのオーバーライドを検討する必要があります。 この場合、ValueType の Equals メソッドの既定の実装よりもパフォーマンスを向上させることができます。
参照型を実装する場合は、型が Point、String、BigNumber などの基本型のように見える場合は、 Equals メソッドをオーバーライドすることを検討する必要があります。
GetHashCode メソッドをオーバーライドして、ハッシュ テーブルで型が正しく機能するようにします。 等値演算子に関するガイダンスを参照してください。
使い方
型宣言の行のどこかにカーソルを置きます。
public class ImaginaryNumber { public double RealNumber { get; set; } public double ImaginaryUnit { get; set; } }
コードは次のスクリーンショットのようになります。
ヒント
型名をダブルクリックしないか、メニュー オプションを使用できません。 行のどこかにカーソルを置くだけです。
次に、次のいずれかのアクションを選択します。
Ctrl+. を押して、クイック アクションとリファクタリング メニューをトリガーします。
右クリックして [クイック アクションとリファクタリング ] メニューを選択します。
左側
をクリックします。
ドロップダウン メニューの [ Generate Equals(object)] または [ Generate Equals and GetHashCode]\(等しいと GetHashCode の生成\) を選択します。
[ メンバーの選択 ] ダイアログ ボックスで、メソッドを生成するメンバーを選択します。
ヒント
ダイアログの下部にあるチェック ボックスを使用して、このダイアログから演算子を生成することもできます。
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); } }
コードは次のスクリーンショットのようになります。