C# のクイック アクションとリファクタリング
Visual Studio Code では、ソース コードをリファクタリングするための多くの方法に加え、コーディング中にコードを生成したり問題を解決したりするためのクイック修正が提供されています。これらにアクセスするには、表示される「電球」アイコンをクリックするか、クイック修正コマンド ⌘. (Windows、Linux は Ctrl+.) を使用して、クイック修正とリファクタリング オプションの一覧を表示します。また、エディターを右クリックして リファクタリング ⌃⇧R (Windows、Linux は Ctrl+Shift+R) を選択すると、リファクタリング オプションのみを表示することもできます。
サポートされているリファクタリングとクイック修正
awaitの追加- メンバーからのコンストラクター パラメーターの追加
DebuggerDisplay属性の追加- 明示的キャストの追加
- ファイル ヘッダーの追加
- 不足している
usings/ インポートの追加 - 名前付き引数の追加
- 匿名型からクラスへの変換
- 自動プロパティと完全なプロパティの間の変換
- 直接キャストと
as式の間の変換 forループとforeachステートメントの間の変換- Get メソッドとプロパティの間の変換
ifとswitchステートメントの間の変換- 通常の文字列と逐語的文字列の間の変換
- クラスをレコードに変換
- ローカル関数をメソッドに変換
- 数値リテラルを 16 進数、10 進数、または 2 進数に変換
- プレースホルダーを補完入り文字列に変換
- 通常の文字列を補完入り文字列に変換
- タプルを構造体に変換
- フィールドのカプセル化
- 比較演算子の生成
- デフォルト コンストラクターの生成
- パラメーターの生成
- すべてのメンバーを明示的に実装する
- すべてのメンバーを暗黙的に実装する
- メソッドのインライン化
- 一時変数のインライン化
- 式のローカル変数を導入する
- パラメーターを導入する
usingステートメントを導入する- 条件式と論理演算を反転する
ifの反転- メンバーを static にする
- 宣言を参照の近くに移動する
- 型を一致するファイルに移動する
forステートメントの逆転ifステートメントの分割またはマージ- 明示的な型の使用
- 暗黙的な型 (var) の使用
- ラムダ式またはブロック本体の使用
- 再帰パターンの使用
- 折り返し、インデント、および配置のリファクタリング
await の追加
内容: 関数呼び出しに await キーワードを追加します。
使用場面: 非同期メソッド内で関数を呼び出している場合。
手順
- 関数呼び出しの場所にキャレットを置きます (多くの場合、赤色の下線が表示されています)。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
awaitの追加 を選択します。

メンバーからのコンストラクター パラメーターの追加
内容: 選択したクラス メンバーに基づいて、パラメーターを持つ新しいコンストラクターを生成します。
使用場面: 新しいコンストラクターを導入し、すべての正しいパラメーターを使用して自動的に適切に宣言したい場合。
理由: 使用する前に手動でコンストラクターを宣言することもできますが、この機能を使用すると自動的に生成されます。
手順
- コンストラクターのパラメーターとして追加したいクラス メンバーをハイライトします。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- コンストラクター <クラス名>(<メンバー型>, <メンバー型>, ...) の生成 を選択します。

DebuggerDisplay 属性の追加
内容: DebuggerDisplay 属性は、デバッガーの変数ウィンドウでオブジェクト、プロパティ、またはフィールドをどのように表示するかを制御します。
使用場面: コード内でプログラムによってデバッガー内の プロパティをピン留め したい場合。
理由: プロパティをピン留めすると、そのプロパティをデバッガー内のオブジェクトのプロパティ リストの先頭に表示させることで、プロパティによるオブジェクトの検査を迅速に行えるようになります。
手順
- 型、デリゲート、プロパティ、またはフィールドのいずれかにカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して クイック アクションとリファクタリング メニューを表示し、
DebuggerDisplay属性の追加 を選択します。 - デフォルトの
ToString()を返す自動メソッドと共にDebuggerDisplay属性が追加されます。

明示的キャストの追加
内容: 使用状況に基づいて、式に明示的なキャストを自動的に追加できます。
使用場面: 式に明示的なキャストを追加する必要があり、それを自動的に適切に割り当てたい場合。
理由: 手動で式に明示的なキャストを追加することもできますが、この機能はコードのコンテキストに基づいて自動的に追加します。
手順
- エラー箇所にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 明示的キャストの追加 を選択します。
ファイル ヘッダーの追加
内容: EditorConfig を使用して、既存のファイル、プロジェクト、およびソリューションにファイル ヘッダーを追加します。
使用場面: ファイル、プロジェクト、およびソリューションにファイル ヘッダーを簡単に追加したい場合。
理由: 著作権保護などの目的で、チームからファイル ヘッダーを含めることが求められている場合。
手順
- プロジェクトまたはソリューションにまだ EditorConfig がない場合は、追加します。
- EditorConfig ファイルに次のルールを追加します:
file_header_template。 - ルールの値に、適用したいヘッダー テキストを設定します。ファイル名のプレースホルダーとして
{fileName}を使用できます。 - 任意の C# ファイルの最初の行にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- ファイル ヘッダーの追加 を選択します。
不足している using / インポートの追加
内容: コピー & ペーストしたコードに必要なインポートまたは using ディレクティブを即座に追加できます。
使用場面: プロジェクト内の別の場所や他のソースからコードをコピーして新しいコードに貼り付けるのは一般的な作業です。このクイック アクションは、コピー & ペーストしたコードで不足しているインポート ディレクティブを見つけ、追加するように促します。このコード修正により、プロジェクト間の参照を追加することもできます。
理由: クイック アクションが必要なインポートを自動的に追加するため、コードに必要な using ディレクティブを手動でコピーする必要がありません。
手順
- 必要な using ディレクティブを含めずに、あるファイルからコードをコピーして新しいファイルに貼り付けます。発生したエラーに対して、不足している using ディレクティブを追加するコード修正が表示されます。
- ⌘. (Windows、Linux は Ctrl+.) を選択して、クイック アクションとリファクタリング メニューを開きます。
- Using <参照名> を選択して、不足している参照を追加します。

名前付き引数の追加
内容: 関数呼び出しの指定されたパラメーター値に、名前付き引数を付加します。
使用場面: パラメーターが多いメソッドがある場合、名前付き引数を追加することでコードの可読性を高めることができます。
手順
- 関数呼び出し内のパラメーターにカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 引数名 <パラメーター名> の追加 を選択します。

匿名型からクラスへの変換
内容: 匿名型をクラスに変換します。
使用場面: 匿名型を使用しているが、それをクラスとしてさらに拡張していきたい場合。
理由: 匿名型はローカルでのみ使用する場合には便利です。コードが成長するにつれて、それらをクラスに昇格させる簡単な方法があるのは有益です。
手順
- 匿名型 (
var) の中にカーソルを置きます。 - ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- クラスに変換 を選択します。

自動プロパティと完全なプロパティの間の変換
内容: 自動実装プロパティと完全なプロパティの間で変換します。
使用場面: プロパティのロジックが変更された場合。
理由: 自動実装プロパティから完全なプロパティへの変換は手動でも可能ですが、この機能を使用すると作業が自動的に行われます。
手順
- プロパティ名の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次の 2 つのオプションから選択します
完全なプロパティに変換。 を選択します。

自動プロパティを使用。 を選択します。

直接キャストと 'as' 式の間の変換
内容: 変数のキャストを、通常のキャストと as キーワードを使用した試行キャストの間で変換します。
使用場面: 特定のシナリオでキャストが失敗することが予想される場合 (as) や、キャストが失敗することが決してないと予想される場合 (直接キャスト)。
手順
- 変数の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して クイック アクションとリファクタリング メニューを表示します。
- 次の 2 つのオプションから選択します
キャストに変更 を選択します。

as 式に変更 を選択します。

for ループと foreach ステートメントの間の変換
内容: コード内に for ループがある場合、このリファクタリングを使用して foreach ステートメントに変換できます。
理由: for ループを foreach ステートメントに変換したい理由には以下が含まれます
- ループ内でローカル ループ変数を、アイテムにアクセスするためのインデックスとして以外に使用していない場合。
- コードを簡素化し、初期化子、条件、反復子のセクションで論理エラーが発生する可能性を減らしたい場合。
foreach ステートメントを for ループに変換したい理由には以下が含まれます
- ループ内でローカル ループ変数を、単なるアイテムへのアクセス以外に使用したい場合。
- 多次元配列を反復処理しており、配列要素をより詳細に制御したい場合。
手順
foreachまたはforキーワードにキャレットを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次の 2 つのオプションから選択します
for に変換 を選択します。

foreach に変換 を選択します。

Get メソッドとプロパティの間の変換
Get メソッドからプロパティへの変換
内容: Get メソッドをプロパティに変換できます (オプションで Set メソッドも)。
使用場面: ロジックを含まない Get メソッドがある場合。
手順
- Get メソッド名の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- (オプション) Set メソッドがある場合は、このときに Set メソッドも変換できます。<Get メソッドまたは Set メソッド名> をプロパティで置換 を選択します。

プロパティから Get メソッドへの変換
内容: プロパティを Get メソッドに変換できます。
使用場面: 単なる値の設定や取得以上の処理を含むプロパティがある場合。
手順
- Get メソッド名の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- <プロパティ名> をメソッドで置換 を選択します。

if と switch ステートメントの間の変換
内容: if ステートメントを switch ステートメント または C# 8.0 の switch 式 に変換します。
使用場面: if ステートメントを switch ステートメントまたは switch 式に変換したい場合、またはその逆を行いたい場合。
理由: if ステートメントを使用している場合、このリファクタリングにより switch ステートメントや switch 式への移行が容易になります。
手順
ifキーワードの中にカーソルを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションから選択します
switch ステートメントに変換 を選択します。

switch 式に変換 を選択します。

if ステートメントに変換 を選択します。

通常の文字列と逐語的文字列の間の変換
内容: 通常の文字列リテラルと逐語的(verbatim)文字列リテラルの間で変換できます。
使用場面: スペースを節約したい場合、またはコードをより明確にしたい場合。
理由: 逐語的文字列リテラルを通常の文字列リテラルに変換すると、スペースの節約に役立つことがあります。通常の文字列リテラルを逐語的文字列リテラルに変換すると、コードがより明確になることがあります。
手順
- 通常の文字列または逐語的文字列リテラルのいずれかにキャレットを置きます
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションのいずれかを選択します
通常の文字列に変換 を選択します。
逐語的文字列に変換 を選択します。
クラスをレコードに変換
内容: クラスを C# のレコード (record) に変換します。
使用場面: データの保存と不変性に特化したレコードに、クラスをすばやく変更したい場合。
手順
- クラス名の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 位置指定レコード (positional record) に変換 を選択します。


ローカル関数をメソッドに変換
内容: ローカル関数をメソッドに変換します。
使用場面: 現在のローカル コンテキストの外で定義したいローカル関数がある場合。
理由: ローカル関数をメソッドに変換すると、ローカル コンテキストの外から呼び出すことができるようになります。また、ローカル関数が長くなりすぎた場合にメソッドに変換したいこともあります。別のメソッドで関数を定義すると、コードが読みやすくなります。
手順
- ローカル関数の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- メソッドに変換 を選択します。

数値リテラルを 16 進数、10 進数、または 2 進数に変換
内容: 数値を 16 進数、2 進数、または 10 進数の間で変換します。
使用場面: 手動で計算することなく、数値を目的の基数に自動的に変換したい場合に使用します。
手順
- 数値リテラルの上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションのいずれかを選択します
10 進数に変換 を選択します。

16 進数に変換 を選択します。

2 進数に変換 を選択します。

プレースホルダーを補完入り文字列に変換
内容: String.Format でフォーマットされた結果文字列 (またはプレースホルダー) を補完入り文字列 (interpolated string) に変換します。
使用場面: 補完入り文字列をすばやく作成したい場合に使用します。
理由: 補完入り文字列は String.Format よりも読みやすく、変数名に直接アクセスできます。
手順
String.Formatのプレースホルダーの上にカーソルを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 補完入り文字列に変換 を選択します。

通常の文字列を補完入り文字列に変換
内容: 通常の文字列を補完入り文字列に変更します。
使用場面: コードを整理して読みやすくしたい場合に使用します。
手順
- 変換したい文字列の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 補完入り文字列に変換 を選択します。


タプルを構造体に変換
内容: タプルを struct (構造体) に変換します
使用場面: タプルを struct にすばやく変更したい場合や、複数回アクセスしたい固定データを持たせたい場合に使用します。
手順
-
タプルの上にカーソルを置きます。
-
⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
-
次のオプションのいずれかを選択します
structに変換 -> 包含するメンバー内の使用箇所を更新 を選択しますstructに変換 -> 包含する型内の使用箇所を更新 を選択しますstructに変換 -> 包含するプロジェクト内の使用箇所を更新 を選択しますstructに変換 -> 依存するプロジェクト内の使用箇所を更新 を選択します


フィールドのカプセル化
内容: フィールドをプロパティに変更し、そのフィールドのすべての使用箇所を新しく作成されたプロパティを使用するように更新します。
使用場面: フィールドをプロパティに移動し、そのフィールドへのすべての参照を更新したい場合。
理由: 他のクラスにフィールドへのアクセスを許可したいが、それらのクラスが直接アクセスすることは望まない場合。フィールドをプロパティでラップすることで、例えば割り当てられる値を検証するコードを記述できるようになります。
手順
- カプセル化するフィールドの名前の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のいずれかを選択します
フィールドのカプセル化: <フィールド名> (およびプロパティを使用) を選択します。

フィールドのカプセル化: <フィールド名> (ただし、引き続きフィールドを使用) を選択します。

比較演算子の生成
内容: IComparable を実装する型に対して比較演算子を生成できます。
使用場面: IComparable を実装する型がある場合に、自動的に比較演算子を追加します。
理由: 値型を実装する場合、ValueType の Equals メソッドのデフォルトの実装よりもパフォーマンスを向上させるために、Equals メソッドをオーバーライドすることを検討する必要があります。
手順
- クラスの内部または IComparable キーワードの上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- ドロップダウン メニューから 比較演算子の生成 を選択します。
デフォルト コンストラクターの生成
内容: クラスの新しいデフォルト コンストラクターのコードを即座に生成できます。
使用場面: 新しいデフォルト コンストラクターを導入し、自動的に適切に宣言したい場合。
理由: 使用する前に手動でコンストラクターを宣言することもできますが、この機能を使用すると自動的に生成されます。
手順
- クラス名の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- コンストラクター <クラス名>() の生成 を選択します。

パラメーターの生成
内容: メソッド パラメーターを自動的に生成します。
使用場面: 現在のコンテキストに存在しない変数をメソッド内で参照してエラーが発生した場合、コード修正としてパラメーターを生成できます。
理由: コンテキストを失うことなく、メソッド シグネチャを素早く変更できます。
手順
- 変数名の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- パラメーターの生成 を選択します。

すべてのメンバーを明示的に実装する
内容: インターフェイスのメソッドをクラス内で明示的に定義します。明示的なインターフェイスの実装は、指定されたインターフェイスを通じてのみ呼び出されるクラス メンバーです。
使用場面: 次のような場合に使用します
- 複数のインターフェイスに対して同じ実装が呼び出されるのを避けたい場合。
- 2 つのインターフェイスがそれぞれ同じ名前の異なるメンバー (プロパティとメソッドなど) を宣言している状況を解決したい場合。
手順
- クラスで実装されているインターフェイスの上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- すべてのメンバーを明示的に実装する を選択します

すべてのメンバーを暗黙的に実装する
内容: インターフェイスのメソッドをクラス内で暗黙的に定義します。暗黙的なインターフェイスの実装とは、インターフェイスのメソッドやプロパティがパブリック メソッドとしてクラスに直接追加されることです。
手順
- クラスで実装されているインターフェイスの上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- インターフェイスを実装する を選択します

メソッドのインライン化
内容: メソッドのインライン化リファクタリング。
使用場面: 単一のステートメント本体内にある static、インスタンス、および拡張メソッドの使用箇所を置換したい場合。元のメソッド宣言を削除するオプションもあります。
理由: このリファクタリングにより、より明確な構文が提供されます。
手順
- メソッドの使用箇所にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションのいずれかを選択します
<修飾メソッド名> をインライン化 を選択して、インライン化したメソッドの宣言を削除します

<修飾メソッド名> をインライン化して保持 を選択して、元のメソッド宣言を保持します

一時変数のインライン化
内容: 一時変数を取り除き、代わりにその値で置き換えることができます。
使用場面: 一時変数を使用することでコードが理解しにくくなっている場合。
理由: 一時変数を削除することで、コードが読みやすくなる可能性があります。
手順
- インライン化する一時変数の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 一時変数のインライン化 を選択します。

式のローカル変数を導入する
内容: 既存の式を置き換えるためのローカル変数を即座に生成できます。
使用場面: ローカル変数にすれば後で簡単に再利用できそうなコードがある場合。
理由: コードを何度もコピーして貼り付けて様々な場所で使用することもできますが、操作を一度実行して結果をローカル変数に保存し、そのローカル変数を全体で使用する方が良いです。
手順
- 新しいローカル変数に割り当てたい式の上にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションから選択します
ローカルの導入 -> <式> のローカルを導入 を選択します

ローカルの導入 -> <式> のすべての出現箇所にローカルを導入 を選択します
パラメーターを導入する
内容: 既存の式を置き換えるための新しいパラメーターを即座に生成できます。
使用場面: パラメーターにすれば後で簡単に再利用できそうなコードがある場合。
理由: コードを何度もコピーして貼り付けて様々な場所で使用することもできますが、操作を一度実行して結果をパラメーターに保存し、そのパラメーターを全体で使用する方が良いです。
手順
- 新しいパラメーターに割り当てたい式の上にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションから選択します
<式> のパラメーターを導入 -> 呼び出し元を直接更新 を選択します

<式> のパラメーターを導入 -> 抽出されたメソッドへ を選択します

<式> のパラメーターを導入 -> 新しいオーバーロードへ を選択します

using ステートメントを導入する
内容: IDisposable インスタンスに using ステートメント / コード ブロックを追加します。
使用場面: IDisposable インスタンスを確実に取得、使用、および破棄したい場合。
手順
- 新しいパラメーターに割り当てたい式の上にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
usingステートメントを導入する を選択します。

条件式と論理演算を反転する
内容: 条件式、または条件付き and \ or 演算子を反転できます。
使用場面: 反転させたほうが理解しやすい条件式や条件付き and \ or 演算子がある場合。
理由: 手動で式や条件付き and \ or 演算子を反転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
手順
- 条件式、または条件付き
and\or演算子の中にカーソルを置きます。 - ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 条件を反転 または
&&を||で置換 を選択します


if の反転
内容: コードの意味を変えずに if または if else ステートメントを反転させることができます。
使用場面: 反転させたほうが理解しやすい if または if else ステートメントがある場合。
理由: 手動で if または if else ステートメントを反転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
手順
ifまたはif elseステートメントの中にカーソルを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
ifの反転 を選択します。

メンバーを static にする
内容: メンバーを static にします。
使用場面: 非 static なメンバーを static にしたい場合。
理由: static メンバーは可読性を向上させます。特定のコードが隔離されていることを知ることで、理解、再読、再利用が容易になります。
手順
- メンバー名の上にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- static にする を選択します。

宣言を参照の近くに移動する
内容: 変数宣言を使用箇所の近くに移動できます。
使用場面: より狭いスコープに配置できる変数宣言がある場合。
理由: そのままにしておくこともできますが、可読性の問題や情報の隠蔽が発生する可能性があります。これは可読性を向上させるためのリファクタリングの機会です。
手順
- 変数宣言の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 宣言を参照の近くに移動する を選択します。

型を一致するファイルに移動する
内容: 選択した型を同じ名前の別のファイルに移動できます。
使用場面: 同じファイル内に複数のクラス、構造体、インターフェイスなどがあり、それらを分離したい場合。
理由: 同じファイルに複数の型を配置すると、それらの型を見つけるのが難しくなることがあります。型を同じ名前のファイルに移動することで、コードの可読性が高まり、ナビゲーションが容易になります。
手順
- 型が定義されている名前の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 型を <型名>.cs に移動 を選択します。

for ステートメントの逆転
内容: for ステートメントを逆転させることができます。
使用場面: for ステートメントの意味と反復方法を逆にしたい場合に使用します。
理由: 手動で for ステートメントを逆転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
手順
forステートメントの中にカーソルを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
forステートメントの逆転 を選択します。

if ステートメントの分割またはマージ
内容: if ステートメントを分割またはマージします。
使用場面: && または || 演算子を使用している if ステートメントを入れ子になった if ステートメントに分割したい場合、あるいは if ステートメントを外側の if ステートメントとマージしたい場合。
理由: スタイルの好みの問題です。
手順
if ステートメントを分割したい場合
ifステートメントの&&または||演算子の近くにカーソルを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 入れ子になった
ifステートメントに分割 を選択します。

内側の if ステートメントを外側の if ステートメントとマージしたい場合
- 内側の
ifキーワードの中にカーソルを置きます。 - ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 入れ子になった
ifステートメントとマージ を選択します。

明示的な型の使用
内容: このリファクタリングを使用して、ローカル変数宣言の var を明示的な型で置き換えます。
理由: コードの可読性を向上させるため、または宣言時に変数を初期化したくない場合。
ただし、変数が匿名型で初期化され、後でそのオブジェクトのプロパティにアクセスする場合は、var を使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。
手順
varキーワードの上にキャレットを置きます。- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
varの代わりに明示的な型を使用する を選択します。

暗黙的な型 (var) の使用
内容: このリファクタリングを使用して、ローカル変数宣言の明示的な型を var で置き換えます。
理由: 個人のコーディング規約に合わせるため、および表示されるコード量を減らすため。変数が匿名型で初期化され、後でそのオブジェクトのプロパティにアクセスする場合は、var を使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。
手順
- 明示的な型のキーワードの上にキャレットを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 暗黙的な型を使用する を選択します。

ラムダ式またはブロック本体の使用
内容: ラムダ式をリファクタリングして、式形式の本体またはブロック形式の本体を使用するようにします。
使用場面: ラムダ式で式形式の本体またはブロック形式の本体のいずれかを使用したい場合。
理由: ラムダ式は、ユーザーの好みに応じて可読性を向上させるためにリファクタリングできます。
手順
- ラムダ演算子の右側にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のいずれかを選択します
ラムダ式にブロック本体を使用する を選択します。

ラムダ式に式本体を使用する を選択します。

再帰パターンの使用
内容: コード ブロックを再帰パターンを使用するように変換します。このリファクタリングは、switch ステートメント、プロパティ パターン マッチング、タプル パターン マッチング、および位置指定パターン マッチングで機能します。
使用場面: 再帰パターンを使用すると、コードがより読みやすく、クリーンになる場合があります。
手順
- 再帰パターンに変換したい式の上にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のいずれかを選択します
switch ステートメントを式に変換 を選択します。

再帰パターンを使用する を選択します。


折り返し、インデント、および配置のリファクタリング
メソッド チェーンの折り返しと整列
内容: メソッド呼び出しのチェーンを折り返して整列させることができます。
使用場面: 1 つのステートメント内に複数のメソッド呼び出しからなる長いチェーンがある場合。
理由: 長いリストは、ユーザーの好みに応じて折り返したりインデントしたりすると読みやすくなります。
手順
- 呼び出しチェーンのいずれかにカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- メソッド チェーンの折り返し または メソッド チェーンの折り返しと整列 を選択してリファクタリングを適用します。

パラメーターまたは引数の折り返し、インデント、整列
内容: パラメーターまたは引数を折り返し、インデント、および整列させることができます。
使用場面: 複数のパラメーターまたは引数を持つメソッドの宣言または呼び出しがある場合。
理由: パラメーターや引数の長いリストは、ユーザーの好みに応じて折り返したりインデントしたりすると読みやすくなります。
手順
- パラメーター リストの中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 次のオプションから選択します
すべてのパラメーターを折り返す -> 折り返されたパラメーターを整列する を選択します

すべてのパラメーターを折り返す -> すべてのパラメーターをインデントする を選択します

すべてのパラメーターを折り返す -> 折り返されたパラメーターをインデントする を選択します

二項式の折り返し
内容: 二項式を折り返すことができます。
使用場面: 二項式がある場合。
理由: 二項式は、ユーザーの好みに応じて折り返すと読みやすくなります。
手順
- 二項式の中にカーソルを置きます。
- ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
- 式の折り返し を選択してリファクタリングを適用します。
