ReSharper 2026.1 Help

等価メンバーを生成する

オブジェクトクラスでの等式メソッド(つまり Equals() および GetHashCode() )および等式演算子(つまり == および != )の実装により、参照の等式が保証されます。 作成するタイプ(最終的に Object から派生するため、デフォルトで参照の等価性を実装します)では、このタイプのオブジェクトの値の等価性を実装し、ハッシュコードをハッシュ目的の一意のオブジェクト識別子として使用することができます。 この場合、タイプの等式メソッドと演算子をオーバーライドする必要があります。

ReSharper を使うことで、これらのルーチンを 等価メンバーを生成する コマンドで自動化できます。

以下の例では、このコマンドを使用して、 _radius_center_description フィールドに基づいて Equals() および GetHashCode() メソッドを生成します。

生成前

生成後

class Circle { /// <summary>Radius of the circle</summary> int _radius; /// <summary>Center point of the circle</summary> Point _center; /// <summary>Description of the circle</summary> string _description; }
class Circle { protected bool Equals(Circle other) { return _radius == other._radius && _center.Equals(other._center) && _description == other._description; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; return Equals((Circle) obj); } public override int GetHashCode() { return HashCode.Combine(_radius, _center, _description); } /// <summary>Radius of the circle</summary> int _radius; /// <summary>Center point of the circle</summary> Point _center; /// <summary>Description of the circle</summary> string _description; }

等価メンバーのオーバーライドを生成する

  1. エディターで、型名または型内の等価メンバーのオーバーライドを挿入する行にキャレットを置きます。 キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。

  2. Alt+Insert を押すか、メインメニューから ReSharper | 編集|コードの生成… を選択します。 あるいは、 Control+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。

  3. 生成する ポップアップで、 等価メンバー を選択します。

  4. 表示される 生成する ダイアログで、 Equals() メソッドで比較し、 GetHashCode() メソッドでの値の生成に含めるフィールドを選択します。

    等価メンバーの生成

    型にフィールドやプロパティが存在しない、またはそれらを選択しない場合、ReSharper は設定に応じて、新しい NotImplementedException() をスローするか、デフォルト値を返すか、生成したメソッドの本体にコンパイルできないコードを記述します。 ReSharper オプションの コード編集 | メンバーの生成 ページで設定できます。

    必要に応じて、ダイアログで次のコントロールを使用します。

    • フィールドは null 可能 — 型に nullable なフィールドまたはプロパティがある場合に表示されます。 デフォルトでこのチェックボックスが選択されている場合、ReSharper は選択したフィールドの null チェックを生成します。 null チェックが不要な場合は、このチェックボックスをオフにできます。

    • 文字列比較 — 型に文字列フィールドがある場合に表示されます。 ReSharper は選択された文字列に対して string.Compare(string, string, StringComparison) を生成し、セレクターで StringComparison 引数にどの値を生成するか選択できます。

    • 対応する上書きがすでに存在する場合は GetHashCode はすでに存在するEquals はすでに存在する が表示され、次のいずれかを選択できるようになります。

      • メソッドがすでに存在する場合は置換します。

      • 新しく生成されたメソッドを既存のメソッドと並べて置きます。

      • 新しいメソッドの生成をすべてスキップします。

    • 「System.HashCode」を使用して「GetHashcode」を実装する — このチェックボックスを選択すると、ReSharper は生成した GetHashcode 実装で System.HashCodexxHash32 を使用)の Combine を使用します。 それ以外の場合、ReSharper は独自のカスタム実装を生成します。

    • 等価演算子をオーバーロードする — 現在のタイプのカスタムの等式および不等式演算子(つまり、 >== および != )を生成します。

    • IEquatable<T> インターフェースを実装する は型固有の Equals() メソッドを実装しています。

    • 型チェックの比較Equals() メソッドがオブジェクトの型を比較する方法を選択できます。

      • これとまったく同じタイプ

      • 所有者の種類として正確に入力してください

      • タイプは所有者タイプまたはサブタイプのものです

  5. 完了 をクリックしてウィザードを完了します。

    オプション をクリックすることで、ReSharper オプションの コード編集 | メンバーの生成 ページで一般的なコード生成の環境設定を確認または変更することもできます。

生成する メニューで メンバーを無効にするを選択して 2 つのオーバーライドを生成することもできますが、その場合は両方とも基本メソッドを返します。

タイプ内の等価メンバーを生成する代わりに、タイプの 等価比較クラスを生成できます。

この機能は、次の言語とテクノロジーで サポートされています。

言語: C#

言語: VB.NET

言語: C++

言語: ASP.NET

言語: Razor

言語: XAML

言語: Resx

言語: スクリプトの作成

言語: SQL

この機能は C# で利用可能です

この機能は Visual Basic で利用可能です

この機能は C++ で利用可能です

この機能は ASP.NET では使用できません

この機能は Razor では使用できません

機能は XAML では使用できません

機能はリソースファイルでは使用できません

機能はビルドスクリプトファイルでは使用できません

機能は SQL/NoSQL ファイルおよびインジェクションでは利用できません

ここで説明する手順と例では、C# の機能の使用について説明します。 他の言語の詳細については、 言語およびフレームワーク セクションの対応するトピックを参照してください。

2026 年 6 月 12 日