ReSharper 2025.3 ヘルプ

匿名から名前付き型に変換リファクタリング

匿名型は、クエリの結果をローカルで処理する必要がある場合に非常に便利です。ただし、プログラムに結果を渡す必要がある場合、同様の名前 / 値部分を返すクエリがいくつかある場合は、名前付き型が必要になる可能性があります。

そのような場合、ReSharper は、匿名型の既存の使用箇所を名前付きの型に変換し、使用箇所を更新できます。必要に応じて、ReSharper はソリューション全体で同様の匿名型を見つけて変換します。このリファクタリングが提供するダイアログで、作成された型をカスタマイズできます。自動プロパティまたはバッキングフィールドを持つプロパティを指定するか、同等性およびフォーマットメソッドのオーバーライドを生成するかを指定できます。

以下の例では、2 つの類似した匿名型が BookLIst クラスに変換されていますが、そのうちの 1 つでリファクタリングを呼び出すだけです。指定されたスコープ内にある型のすべての用途は、それに応じて変更されます:

class MyTest { void Test(List<Book> books) { var bookList = from book in books select new {book.Author, book.Title}; } } class MyNewTest { void Foo(List<Book> library) { var bookCatalog = from item in library select new {item.Author, item.Title}; } }
public class BookList { public string Author { get; set; } public string Title { get; set; } } class MyTest { private void Test(List<Book> books) { var bookList = from book in books select new BookList {Author = book.Author, Title = book.Title}; } } class MyNewTest { private void Foo(List<Book> library) { var bookCatalog = from item in library select new BookList {Author = item.Author, Title = item.Title}; } }

このリファクタリングは、匿名型の初期化子に別の匿名の初期化子が内部にある場合は適用できません。例:

var bookList = from book in books select new {book.Author, title = new {book.Title}};

ここでは、このリファクタリングを new {book.Title} に適用できますが、new {book.Author, title = new {book.Title}} には適用できません。

匿名型を名前付き型に変換する

  1. キャレットを匿名型の初期化子または new キーワードのどちらかに配置します。

  2. 以下のいずれか 1 つを実行します:

    • Control+Shift+R を押し、匿名型を名前付きクラスに置き換えるを選択します。

    • 右クリックして、コンテキストメニューからリファクタリング | 匿名型を名前付きクラスに置き換えるを選択します。

    • メインメニューから ReSharper | リファクタリング | 変換 | 匿名型から名前付き型 ... を選択します。

    匿名型を名前付きクラスに置き換えるダイアログが開きます。

  3. 新しいクラスの名前を指定し、次のオプションを設定します。

    • スコープ : ReSharper は、ソリューション全体で互換性のあるオブジェクト初期化子(同じ名前 / 値の部分)を持つ匿名型を見つけることができます。あるいは、現在のメソッドだけにリファクタリングを適用することができます。

    • ロケーション : 新しい名前付き型は、現在の型のネストされたクラスとして作成することも、現在の名前空間内に独立したクラスを作成することもできます。

    • プロパティの生成方法 : ReSharper は、読み取りと書き込みの自動プロパティ、または新しいクラスのバッキングフィールドを持つ読み取り専用プロパティを生成できます。

    • メソッドの生成方法 : オプションとして、新しいクラスで Equals()GetHashCode()ToString() メソッドオーバーライドのスタブを作成することを選択できます。

    • 処理された使用箇所を「検索結果」に表示する : このチェックボックスが選択されている場合、ReSharper は、検索結果ウィンドウで検出および変換するすべての匿名型を表示します。ソリューション全体で同様の匿名型を変換する場合は、このチェックボックスをオンにすることができます。

  4. リファクタリングを適用するには、次へをクリックします。

  5. 競合が見つからない場合、ReSharper はすぐにリファクタリングを実行します。それ以外の場合は、競合を解決するように求められます。

Replace Anonymous Type with Named Class

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

Results of converting anonymous types into a named class

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

2024 年 9 月 23 日

関連ページ:

型を外部スコープに移動リファクタリング

このリファクタリングは、ネストされた型を 1 レベル上に移動できます。ネストされた型が親型のメンバーを使用していても、対応するすべての参照は自動的に更新されます。型を外部スコープに移動する次のいずれかの方法でネストされた型を選択します。エディターで、ネストされた型の名前にキャレットを置きます。ソリューションエクスプローラーでネストされた型を選択します。ファイル構造ウィンドウウィンドウでネストされた型を選択します。クラスビューでネストされた型を選択します。オブジェクトブラウザーでネストされた型を選...

型を別のファイルに移動リファクタリング

このリファクタリングを使用すると、選択した型を現在のファイルから既存のファイルまたは新しいファイルに移動できます。新しいファイルに移動する場合は、新しいファイルが自動的に作成されます。現在のファイルにそれ以上型がない場合は、それを削除することができます。必要なすべてのインポートは、その型とともに移動されます。不要になったインポートはすべて元のファイルから削除されます。ネストされた型でこのリファクタリングを呼び出すと、ReSharper は親クラスを部分的にし、部分クラスの新しい部分用に新しいファ...

検索結果を分析する

ReSharper のナビゲーション操作と検索操作で複数の結果が得られた場合、これらの結果を検索結果ウィンドウに表示することができます。検索結果ウィンドウは、検索結果を分析するためのさまざまな方法を提供します。デフォルトの動作を変更して、見つかった単一の使用箇所も検索結果ウィンドウに表示されるようにすることができます。これを行うには、ReSharper オプション Alt+R, O のページで使い方に移動: 結果が 1 つしかない場合は ... チェックボックスをオフにします。一部のアクション、たとえ...

リファクタリングの競合を解決する

ReSharper のすべてのリファクタリングはソリューション全体に適用されるため、多くのファイルが影響を受ける可能性があり、一部の変更は既存のコードと競合する可能性があります。競合がある場合、ReSharper はそれらを検出し、リファクタリングウィザードの最後のページに競合のリストを表示します。例: 安全な削除リファクタリングをメソッドに適用するときに表示されるいくつかの競合を次に示します。競合には 2 つの型があります。コンパイルを中断することなく削除できる使用箇所は、アイコンでマークされて...

さまざまな言語の ReSharper 機能

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

ASP.NET MVC 特有の機能

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