等価比較器を生成する。
IEqualityComparer<T> は、コレクション用のカスタマイズされた等価比較の実装を可能にする汎用 .NET インターフェースです。
タイプの比較クラスを作成することは、そのタイプの Equals() メソッドと GetHashCode() メソッドを作成する代わりです。 生成された comparer クラスは、 IEqualityComparer<T> インターフェースを実装し、カスタム Equals() および GetHashCode() )メソッドを提供します。
JetBrains Rider は、比較演算子クラスの生成を自動化する 等値比較演算子を生成する。 コマンドを提供します。
以下の例では、このコマンドを使用して、 _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 を押すか、メインメニューから を選択してください。 あるいは、 Ctrl+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。
生成する ポップアップで、 等価比較 を選択します。
表示される 生成する ダイアログで、コンペアクラスで使用するフィールドを選択します。

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