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
の反転- メンバーを静的にする
- 宣言を参照の近くに移動
- 型を一致するファイルに移動
for
ステートメントの逆順if
ステートメントの分割またはマージ- 明示的な型を使用
- 暗黙的な型を使用
- ラムダ式またはブロック本体を使用
- 再帰的なパターンを使用
- 折り返し、インデント、および配置のリファクタリング
await の追加
内容: 関数呼び出しに await
キーワードを追加します。
状況: 非同期メソッド内で関数を呼び出すとき。
方法
- 関数呼び出しにキャレットを置きます (ほとんどの場合、赤の下線が引かれます)。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
await
を追加 を選択します。
メンバーからコンストラクター パラメーターを追加
内容: 選択されたクラス メンバーに基づいてパラメーターを持つ新しいコンストラクターを生成します。
状況: 新しいコンストラクターを導入し、すべての正しいパラメーターを自動的に適切に宣言したい場合。
理由: コンストラクターを使用する前に宣言することもできますが、この機能は自動的に生成します。
方法
- コンストラクターにパラメーターとして追加したいクラス メンバーをハイライトします。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- コンストラクター <クラス名>(<メンバーの型>, <メンバーの型>, <など>) を生成 を選択します。
DebuggerDisplay 属性の追加
内容: DebuggerDisplay 属性は、オブジェクト、プロパティ、またはフィールドがデバッガーの変数ウィンドウでどのように表示されるかを制御します。
状況: デバッガー内でプロパティをピン留めしたいとき、コード内でプログラム的に行いたい場合。
理由: プロパティをピン留めすると、デバッガー内のオブジェクトのプロパティ リストの先頭にそのプロパティを移動させることで、オブジェクトをプロパティで素早く検査できます。
方法
- 型、デリゲート、プロパティ、またはフィールドのいずれかにカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーし、
DebuggerDisplay
属性を追加 を選択するには、⌘. (Windows, Linux Ctrl+.) を押します。 DebuggerDisplay
属性は、既定のToString()
を返す自動メソッドと共に追加されます。
明示的なキャストの追加
内容: 使用状況に基づいて、式に明示的なキャストを自動的に追加できます。
状況: 式に明示的なキャストを追加する必要があり、それを自動的に適切に割り当てたい場合。
理由: 式に明示的なキャストを手動で追加することもできますが、この機能はコードのコンテキストに基づいて自動的に追加します。
方法
- エラーにキャレットを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 明示的なキャストを追加 を選択します。
ファイル ヘッダーの追加
内容: EditorConfig を使用して、既存のファイル、プロジェクト、およびソリューションにファイル ヘッダーを追加します。
状況: ファイル、プロジェクト、およびソリューションにファイル ヘッダーを簡単に追加したい場合。
理由: チームが著作権目的でファイル ヘッダーを含めることを要求している場合。
方法
- まだない場合は、プロジェクトまたはソリューションに EditorConfig を追加します。
- EditorConfig ファイルに次のルールを追加します:
file_header_template
。 - ルールの値を適用したいヘッダー テキストに設定します。ファイル名のプレースホルダーとして
{fileName}
を使用できます。 - 任意の C# ファイルの最初の行にキャレットを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- ファイル ヘッダーを追加 を選択します。
不足している usings / インポートの追加
内容: コピー&ペーストされたコードに必要なインポートまたは 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
ステートメントに変換 を選択します。
通常の文字列と逐語的文字列間の変換
内容: 通常の文字列と逐語的文字列リテラル間で変換できます。
状況: スペースを節約したい、またはコードの明確さを高めたい場合。
理由: 逐語的文字列リテラルを通常の文字列リテラルに変換すると、スペースを節約できます。通常の文字列リテラルを逐語的文字列リテラルに変換すると、より明確になります。
方法
- 通常の文字列または逐語的文字列リテラルのいずれかにキャレットを置きます
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 次のいずれかのオプションから選択します
通常の文字列に変換 を選択します。
逐語的文字列に変換 を選択します。
クラスをレコードに変換
内容: クラスを C# のレコードに変換します。
状況: データの格納と不変性に特化したレコードにクラスを素早く変更したい場合。
方法
- クラス名にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 位置指定レコードに変換 を選択します。
ローカル関数をメソッドに変換
内容: ローカル関数をメソッドに変換します。
状況: 現在のローカル コンテキストの外で定義したいローカル関数がある場合。
理由: ローカル関数をローカル コンテキストの外で呼び出せるようにメソッドに変換したい場合。ローカル関数が長くなりすぎた場合にメソッドに変換すると良いかもしれません。関数を別のメソッドで定義すると、コードが読みやすくなります。
方法
- ローカル関数にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- メソッドに変換 を選択します。
数値リテラルを 16 進数、10 進数、または 2 進数に変換
内容: 数値を 16 進数、2 進数、または 10 進数に変換します。
状況: 手動で変換を計算することなく、数値を目的の基数に自動的に変換したい場合に使用します。
方法
- 数値リテラルにカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 次のいずれかのオプションを選択します
10 進数に変換 を選択します。
16 進数に変換 を選択します。
2 進数に変換 を選択します。
プレースホルダーを挿入文字列に変換
内容: String.Format
で書式設定された結果の文字列 (またはプレースホルダー) を挿入文字列に変換します。
状況: 挿入文字列を素早く使用したい場合。
理由: 挿入文字列は 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+.) を押します。
- すべてのメンバーを明示的に実装 を選択します
すべてのメンバーを暗黙的に実装
内容: インターフェースのメソッドをクラス内で暗黙的に定義します。暗黙的なインターフェース実装とは、インターフェースのメソッドとプロパティが public メソッドとしてクラスに直接追加されることです。
方法
- クラスで実装されているインターフェースにカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- インターフェースの実装 を選択します
メソッドのインライン化
内容: メソッドのインライン化リファクタリング。
状況: 単一のステートメント本体内での静的メソッド、インスタンス メソッド、および拡張メソッドの使用を置き換えたい場合で、元のメソッド宣言を削除するオプションもあります。
理由: このリファクタリングは、より明確な構文を提供します。
方法
- メソッドの使用箇所にキャレットを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (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
を反転 を選択します。
メンバーを静的にする
内容: メンバーを静的にします。
状況: 静的でないメンバーを静的にしたい場合。
理由: 静的メンバーは読みやすさを向上させます。特定のコードが分離されていることを知ることで、理解、再読、再利用が容易になります。
方法
- メンバー名にキャレットを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 静的にする を選択します。
宣言を参照の近くに移動
内容: 変数宣言をその使用箇所に近づけることができます。
状況: より狭いスコープにできる変数宣言がある場合。
理由: そのままにしておくこともできますが、読みやすさの問題や情報の隠蔽を引き起こす可能性があります。これは読みやすさを向上させるためのリファクタリングの機会です。
方法
- 変数宣言にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (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 を使用する必要があります。詳細については、「暗黙的に型指定されたローカル変数 (C#)」を参照してください。
方法
- 明示的な型のキーワードにキャレットを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 暗黙的な型を使用 を選択します。
ラムダ式またはブロック本体を使用
内容: ラムダ式をリファクタリングして、式本体またはブロック本体を使用するようにします。
状況: ラムダ式に式本体またはブロック本体のいずれかを使用したい場合。
理由: ラムダ式は、ユーザーの好みに応じて読みやすさを向上させるためにリファクタリングできます。
方法
- ラムダ演算子の右側にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 次のいずれかを選択します
ラムダ式にブロック本体を使用 を選択します。
ラムダ式に式本体を使用 を選択します。
再帰的なパターンを使用
内容: コード ブロックを再帰的なパターンを使用するように変換します。このリファクタリングは、switch ステートメント、プロパティ パターン マッチング、タプル パターン マッチング、および位置指定パターン マッチングで機能します。
状況: 再帰的なパターンを使用すると、コードがより読みやすく/きれいになる場合があります。
方法
- 再帰的なパターンに変換したい式にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 次のいずれかを選択します
switch
ステートメントを式に変換 を選択します。
再帰的なパターンを使用 を選択します。
折り返し、インデント、および配置のリファクタリング
呼び出しチェーンの折り返しと配置
内容: メソッド呼び出しのチェーンを折り返して配置できます。
状況: 1 つのステートメントに複数のメソッド呼び出しからなる長いチェーンがある場合。
理由: 長いリストは、ユーザーの好みに応じて折り返されたりインデントされたりすると読みやすくなります。
方法
- いずれかの呼び出しチェーンにカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- リファクタリングを受け入れるには、呼び出しチェーンを折り返す または 呼び出しチェーンを折り返して配置 を選択します。
パラメーターまたは引数の折り返し、インデント、および配置
内容: パラメーターまたは引数を折り返し、インデントし、配置できます。
状況: 複数のパラメーターまたは引数を持つメソッド宣言または呼び出しがある場合。
理由: パラメーターまたは引数の長いリストは、ユーザーの好みに応じて折り返されたりインデントされたりすると読みやすくなります。
方法
- パラメーター リストにカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- 以下のオプションから選択します
すべてのパラメーターを折り返す -> 折り返したパラメーターを配置 を選択します
すべてのパラメーターを折り返す -> すべてのパラメーターをインデント を選択します
すべてのパラメーターを折り返す -> 折り返したパラメーターをインデント を選択します
二項式の折り返し
内容: 二項式を折り返すことができます。
状況: 二項式がある場合。
理由: 二項式は、ユーザーの好みに合わせて折り返すと読みやすくなります。
方法
- 二項式にカーソルを置きます。
- クイック アクションとリファクタリング メニューをトリガーするには、⌘. (Windows, Linux Ctrl+.) を押します。
- リファクタリングを受け入れるには、式を折り返す を選択します。