ReSharper 2024.3 ヘルプ

等価比較器を生成する

IEqualityComparer<T> は、コレクション用のカスタマイズされた等価比較の実装を可能にする汎用 .NET インターフェースです。

タイプの比較クラスを作成することは、そのタイプの Equals() メソッドと GetHashCode() メソッドを作成する代わりです。生成された comparer クラスは、IEqualityComparer<T> インターフェースを実装し、カスタム Equals() および GetHashCode())メソッドを提供します。

ReSharper は、等価比較子を生成するコマンドを提供して、comparer クラスの生成を自動化します。

以下の例では、このコマンドを使用して、_radius および _center フィールドに基づいて比較クラスを生成します。

生成前

生成後

class Circle { int _radius; Point _center; }
class Circle { int _radius; Point _center; private sealed class RadiusCenterEqualityComparer : IEqualityComparer<Circle> { public bool Equals(Circle x, Circle y) { if (ReferenceEquals(x, y)) return true; if (ReferenceEquals(x, null)) return false; if (ReferenceEquals(y, null)) return false; if (x.GetType() != y.GetType()) return false; return x._radius == y._radius && x._center.Equals(y._center); } public int GetHashCode(Circle obj) { unchecked { return (obj._radius*397) ^ obj._center.GetHashCode(); } } } private static readonly IEqualityComparer<Circle> RadiusCenterComparerInstance = new RadiusCenterEqualityComparer(); public static IEqualityComparer<Circle> RadiusCenterComparer { get { return RadiusCenterComparerInstance; } } }

等価比較クラスを生成する

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

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

  3. 生成ポップアップで、等価比較を選択します。

  4. 表示される生成ダイアログで、コンペアクラスで使用するフィールドを選択します。

    Generating equality comparer with ReSharper

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

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

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

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

    • 静的プロパティを介して公開する — 比較クラスをプライベートにし、比較クラスをコンシューマーに公開する静的プロパティを生成します。

    • Comparer 名の接頭辞 — 生成された比較クラスの名前で使用される接頭辞を指定できます。

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

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

または、IEqualityComparer<T> を実装する空の比較クラスを記述し、Alt+Enter メニューから対応するクイックフィックスを選択することもできます。

ReSharper: Generate equality comparer quick-fix

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

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

関連ページ:

等価メンバーを生成する

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

さまざまな言語の ReSharper 機能

以下の表は、各 ReSharper 機能がサポートされている言語 / テクノロジーを説明しています。これらは言語固有の機能のみをリストし、プロジェクト依存関係ダイアグラム、名前空間の調整リファクタリング、スタックトレースエクスプローラーなどのプロジェクト / ソリューションスコープの多くの機能を含まず、最近のファイルを表示します。コード解析:コードインスペクション

ASP.NET MVC 特有の機能

ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...

言語による ReSharper: MSBuild

MSBuild は、アプリケーションを構築するために広く使用されているプラットフォームです。特定の XML タグを使用して、プロジェクトの構築方法や実行方法を定義できます。ReSharper を使用すると、より速く行うことができます。コード検査:あらかじめ定義された要素またはその属性の名前を誤って入力した場合、ReSharper はそのような不一致についてハイライト表示します。まだ定義されていないプロパティを参照しようとすると、ReSharper はそのようなケースも検出します。MSBuild...

言語による ReSharper: Google プロトコルバッファ (Protobuf)

ReSharper オプションのページで Protobuf サポートが明示的に有効になっている場合、ReSharper は Google Protocol Buffers (Protobuf) バージョン 2.x および 3.0 の .proto ファイルでコード分析および支援機能を提供します。ReSharper は、.proto ファイルの言語構文をハイライトし、エラーを検出してハイライトします。基本コード補完と他のタイピング支援機能はエディターで利用可能です。型と値の宣言に行き、それらの使用箇所を...

言語 JSON による ReSharper

JSON および JSON スキーマのサポートは、現在、構文のハイライト(古い Visual Studio バージョンを含む)のような基本的なものから、コードのフォーマットや再配置(たとえば、オブジェクトのプロパティや任意の選択を移動できる)、コードインスペクションおよびクイックフィックスなどのより高度な機能にまでおよびます。スキーマ、パス、正規表現、パッケージを認識するコード補完も同様です。JSON 値ヘルパー:ReSharper では、JSON プロパティの一部を特定の値タイプ(正規表現、...