Visual Studio で Equals および GetHashCode メソッドのオーバーライドを生成する
適用対象:Visual Studio
Visual Studio for Mac
Visual Studio Code
このコード生成は以下に適用されます。
- C#
概要:Equals メソッドと GetHashCode メソッドを生成します。
タイミング: これらのオーバーライドは、メモリ内のオブジェクトの場所ではなく、1 つ以上のフィールドによって比較される型がある場合に生成されます。
理由:
値の型を実装する場合、Equals メソッドのオーバーライドを検討してください。 オーバーライドにした場合、ValueType では、Equals メソッドの既定の実装に比べ、パフォーマンスが上がります。
参照型を実装する場合、Equals メソッドのオーバーライドは、型がポイント、文字列、BigNumber などの基本データ型に似ている場合に検討してください。
ハッシュ テーブルで型を正しく機能させるには、GetHashCode メソッドをオーバーライドします。 詳細については等値演算子のガイドラインをご覧ください。
操作方法
型宣言の行のどこかにカーソルを置きます。
public class ImaginaryNumber { public double RealNumber { get; set; } public double ImaginaryUnit { get; set; } }
コードは次のスクリーンショットのようになります。
ヒント
型名をダブルクリックして選択しないでください。ダブルクリックすると、メニュー オプションが利用できなくなります。 行のどこかにカーソルを置くだけです。
次に、次の操作のいずれかを選択します。
Ctrl+. キーを押して、[クイック アクションとリファクタリング] メニューをトリガーします。
右クリックして [クイック アクションとリファクタリング] メニューを選択します。
左余白に表示される
アイコンをクリックします。
ドロップダウン メニューで [Equals(object) を生成する] または [Equals および 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); } }
コードは次のスクリーンショットのようになります。