匿名から名前付き型に変換リファクタリング
匿名型は、クエリの結果をローカルで処理する必要がある場合に非常に便利です。 ただし、プログラムに結果を渡す必要がある場合、同様の名前 / 値部分を返すクエリがいくつかある場合は、名前付き型が必要になる可能性があります。
このような場合、JetBrains Rider は既存の匿名型の使用箇所(または複数の使用箇所)を名前付き型に変換し、使用箇所を更新できます。 必要に応じて、JetBrains Rider はソリューション全体で同様の匿名型を検索し、変換します。 このリファクタリングで表示されるダイアログでは、作成される型をカスタマイズできます。自動プロパティにするかバッキングフィールド付きプロパティにするか、または等値やフォーマットのメソッドオーバーライドを生成することができます。
以下の例では、2 つの類似した匿名型が BookLIst クラスに変換されていますが、そのうちの 1 つでリファクタリングを呼び出すだけです。 指定されたスコープ内にある型のすべての用途は、それに応じて変更されます:
このリファクタリングは、匿名型の初期化子に別の匿名の初期化子が内部にある場合は適用できません。 例えば:
ここでは、このリファクタリングを new {book.Title} に適用できますが、 new {book.Author, title = new {book.Title}} には適用できません。
匿名型を名前付き型に変換する
キャレットを匿名型の初期化子または
newキーワードのどちらかに配置します。次のいずれかを実行します:
Ctrl+Alt+Shift+T を押し、を 匿名型を名前付きクラスに置き換える を選択します。
メインメニューから を選択します。
匿名型を名前付きクラスに置き換える ダイアログが開きます。
新しいクラスの名前を指定し、次のオプションを設定します。
スコープ.: JetBrains Rider は、ソリューション全体から互換性のあるオブジェクトイニシャライザー(似た名前や値の部分を持つもの)を持つ匿名型を検索できます。または、現在のメソッドのみにリファクタリングを適用することもできます。
ロケーション.: 新しい名前付き型は、現在の型のネストされたクラスとして作成することも、現在の名前空間内に独立したクラスを作成することもできます。
プロパティの生成方法: JetBrains Rider は、新しいクラスで読み書き可能な自動プロパティ、またはバッキングフィールド付きの読み取り専用プロパティを生成することができます。
メソッドの生成方法: オプションとして、新しいクラスで
Equals()、GetHashCode()、ToString()メソッドオーバーライドのスタブを作成することを選択できます。処理された使用箇所を「検索結果」に表示する: このチェックボックスを選択すると、JetBrains Rider が検出および変換したすべての匿名型を 検索 ウィンドウに表示します。 ソリューション全体で同様の匿名型を変換する場合は、このチェックボックスをオンにすることができます。
リファクタリングを適用するには、 次へ をクリックします。
競合するものが見つからない場合、JetBrains Rider はすぐにリファクタリングを実行します。 それ以外の場合は、 競合を解決するように求められます。

処理された使用箇所を「検索結果」に表示する を選択した場合、新しいクラスと変更後の使用箇所が 検索 ウィンドウに表示されます:
