リレーショナル比較演算子を生成する
JetBrains Rider は、選択したフィールドやプロパティを使用して Comparer<T> から派生したネストされた比較演算子クラスの作成を支援します。 文字列比較アルゴリズムの選択と null チェックの生成に加えて、比較クラスをコンシューマーに公開する静的プロパティを生成することもできます。
以下の例では、このコマンドを使用して、 Person クラスのオブジェクトを比較するときに、 int _birthYear および string _name フィールドを考慮に入れたリレーショナル比較関数を生成します。
生成前 | 生成後 |
|---|---|
class Person
{
private int _birthYear;
private string _name;
}
|
class Person
{
private int _birthYear;
private string _name;
private sealed class BirthYearNameRelationalComparer : Comparer<Person>
{
public override int Compare(Person x, Person y)
{
if (ReferenceEquals(x, y)) return 0;
if (ReferenceEquals(null, y)) return 1;
if (ReferenceEquals(null, x)) return -1;
var birthYearComparison = x._birthYear.CompareTo(y._birthYear);
if (birthYearComparison != 0) return birthYearComparison;
return string.Compare(x._name, y._name, StringComparison.Ordinal);
}
}
public static Comparer<Person> BirthYearNameComparer { get; }
= new BirthYearNameRelationalComparer();
}
|
リレーショナル比較クラスを生成する
エディターで、型名または型内のリレーショナル比較クラスを挿入する行にキャレットを置きます。 キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。
Alt+Insert を押すか、メインメニューから を選択してください。 あるいは、 Ctrl+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。
生成する ポップアップで、 関係比較演算子 を選択します。
表示される 生成する ダイアログで、プロパティとフィールドの一覧が表示されます。 型の比較に使用するメンバーを選択します。

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