等価比較演算子の生成
IEqualityComparer<T> は、コレクション用のカスタマイズされた等価比較の実装を可能にする汎用 .NET インターフェースです。
タイプの比較クラスを作成することは、そのタイプの Equals() メソッドと GetHashCode() メソッドを作成する代わりです。 生成された comparer クラスは、 IEqualityComparer<T> インターフェースを実装し、カスタム Equals() および GetHashCode() )メソッドを提供します。
ReSharper は、 等値比較演算子を生成する コマンドを提供し、比較演算子クラスの生成を自動化します。
以下の例では、このコマンドを使用して、 _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; }
}
}
|
等価比較クラスを生成する
エディターで、型名または型内の等価比較クラスを挿入する行にキャレットを置きます。 キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。
Alt+Insert を押すか、メインメニューから を選択します。 あるいは、 Control+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。
生成する ポップアップで、 等価比較 を選択します。
表示される 生成する ダイアログで、コンペアクラスで使用するフィールドを選択します。

型にフィールドやプロパティが存在しない、またはそれらを選択しない場合、ReSharper は設定に応じて、新しい
NotImplementedException()をスローするか、デフォルト値を返すか、生成したメソッドの本体にコンパイルできないコードを記述します。 ReSharper オプションの ページで設定できます。必要に応じて、ダイアログで次のコントロールを使用します。
フィールドは null 可能 — 型に nullable なフィールドまたはプロパティがある場合に表示されます。 デフォルトでこのチェックボックスが選択されている場合、ReSharper は選択したフィールドの null チェックを生成します。 null チェックが不要な場合は、このチェックボックスをオフにできます。
文字列比較 — 型に文字列フィールドがある場合に表示されます。 ReSharper は選択された文字列に対して
string.Compare(string, string, StringComparison)を生成し、セレクターで StringComparison 引数にどの値を生成するか選択できます。静的プロパティを介して公開する — 比較クラスをプライベートにし、比較クラスをコンシューマーに公開する静的プロパティを生成します。
Comparer 名の接頭辞 — 生成された比較クラスの名前で使用される接頭辞を指定できます。
完了 をクリックしてウィザードを完了します。
オプション をクリックすることで、ReSharper オプションの ページで一般的なコード生成の環境設定を確認または変更することもできます。
または、 IEqualityComparer<T> を実装する空の比較クラスを記述し、 Alt+Enter メニューから対応するクイックフィックスを選択することもできます。

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