C# のクイックアクションとリファクタリング
Visual Studio Code には、ソースコードをリファクタリングするための多くの方法や、コーディング中にコードを生成したり問題を修正したりするためのクイックフィックスが用意されています。それらにアクセスするには、表示される「電球」アイコンをクリックするか、クイックフィックス コマンド ⌘. (Windows、Linux Ctrl+.) を使用して、クイックフィックスとリファクタリングのオプションのリストを表示します。エディターを右クリックして リファクター ⌃⇧R (Windows、Linux Ctrl+Shift+R) を選択すると、リファクタリングオプションのみを表示することもできます。
サポートされるリファクタリングとクイックフィックス
await
の追加- メンバーからコンストラクターパラメーターを追加
DebuggerDisplay
属性の追加- 明示的なキャストの追加
- ファイルヘッダーの追加
- 不足している
usings
/ imports の追加 - 名前付き引数の追加
- 匿名型をクラスに変換
- 自動プロパティと完全なプロパティ間で変換
- 直接キャストと
as
式間で変換 for
ループとforeach
ステートメント間で変換- Get メソッドとプロパティ間で変換
if
ステートメントとswitch
ステートメント間で変換- 通常文字列と逐語的文字列間で変換
- クラスをレコードに変換
- ローカル関数をメソッドに変換
- 数値リテラルを16進数、10進数、または2進数に変換
- プレースホルダーを補間文字列に変換
- 通常文字列を補間文字列に変換
- タプルを構造体に変換
- フィールドのカプセル化
- 比較演算子の生成
- デフォルトコンストラクターの生成
- パラメーターの生成
- すべてのメンバーを明示的に実装
- すべてのメンバーを暗黙的に実装
- メソッドのインライン化
- 一時変数のインライン化
- 式のローカル変数を導入
- パラメーターの導入
using
ステートメントの導入- 条件式と論理演算の反転
if
の反転- メンバーを静的にする
- 宣言を参照の近くに移動
- 型を一致するファイルに移動
for
ステートメントの反転if
ステートメントの分割または結合- 明示的な型を使用
- 暗黙的な型を使用
- ラムダ式またはブロックボディを使用
- 再帰パターンを使用
- リファクタリングの折り返し、インデント、および配置
await の追加
内容: 関数呼び出しに await
キーワードを追加します。
使用状況: 非同期メソッド内で関数を呼び出すとき。
方法
- 関数呼び出しのところにキャレットを置きます (おそらく赤線で下線が引かれています)。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Add
await
を選択します。
メンバーからコンストラクターパラメーターを追加
内容: 選択したクラスメンバーに基づいて、パラメーターを持つ新しいコンストラクターを生成します。
使用状況: 新しいコンストラクターを導入し、すべての正しいパラメーターで自動的に適切に宣言したい場合。
理由: コンストラクターを使用する前に宣言することもできますが、この機能は自動的に生成します。
方法
- コンストラクターにパラメーターとして追加したいクラスメンバーをハイライトします。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Generate constructor <classname>(<membertype>, <membertype>, <etc.>) を選択します。
DebuggerDisplay 属性の追加
内容: DebuggerDisplay 属性 は、デバッガー変数ウィンドウでオブジェクト、プロパティ、またはフィールドがどのように表示されるかを制御します。
使用状況: コード内でデバッガー内の プロパティをプログラムでピン留め したい場合。
理由: プロパティをピン留めすると、そのプロパティをオブジェクトのプロパティリストの最上位に表示することで、デバッガー内でオブジェクトをそのプロパティから素早く検査できます。
方法
- 型、デリゲート、プロパティ、またはフィールドのいずれかにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押してクイックアクションとリファクタリング メニューをトリガーし、Add
DebuggerDisplay
attribute を選択します。 DebuggerDisplay
属性と、デフォルトのToString()
を返す自動メソッドが追加されます。
明示的なキャストの追加
内容: 使用状況に基づいて、式に明示的なキャストを自動的に追加できます。
使用状況: 式に明示的なキャストを追加する必要があり、それを自動的に適切に割り当てたい場合。
理由: 手動で式に明示的なキャストを追加することもできますが、この機能はコードのコンテキストに基づいて自動的に追加します。
方法
- エラーのところにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Add explicit cast を選択します。
ファイルヘッダーの追加
内容: EditorConfig を使用して、既存のファイル、プロジェクト、ソリューションにファイルヘッダーを追加します。
使用状況: ファイル、プロジェクト、ソリューションに簡単にファイルヘッダーを追加したい場合。
理由: チームが著作権のためにファイルヘッダーを含めることを要求している場合。
方法
- まだない場合は、プロジェクトまたはソリューションに EditorConfig を追加します。
- EditorConfig ファイルに次のルールを追加します:
file_header_template
。 - ルールの値を、適用したいヘッダーテキストと等しく設定します。ファイル名のプレースホルダーとして
{fileName}
を使用できます。 - 任意の C# ファイルの最初の行にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Add file header を選択します。
不足している usings / imports の追加
内容: コピー&ペーストされたコードに必要なインポートや using ディレクティブをすぐに追加できます。
使用状況: プロジェクトの異なる場所や他のソースからコードをコピーして新しいコードに貼り付けるのは一般的な習慣です。このクイックアクションは、コピー&ペーストされたコードに不足しているインポートディレクティブを見つけて、それらを追加するように促します。このコード修正は、プロジェクト間の参照も追加できます。
理由: クイックアクションがコードに必要な using ディレクティブを自動的に追加するため、手動でコピーする必要がありません。
方法
- 必要な using ディレクティブを含まずに、ファイルをコピーして新しいファイルに貼り付けます。結果として生じるエラーには、不足している using ディレクティブを追加するコード修正が伴います。
- ⌘. (Windows、Linux Ctrl+.)を選択して、クイックアクションとリファクタリング メニューを開きます。
- Using <your reference> を選択して、不足している参照を追加します。
名前付き引数の追加
内容: 関数呼び出しで指定されたパラメーター値に名前付き引数を追加します。
使用状況: 多くのパラメーターを持つメソッドがある場合、名前付き引数を追加してコードをより読みやすくできます。
方法
- 関数呼び出し内のパラメーターにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Add argument name <parameter name> を選択します。
匿名型をクラスに変換
内容: 匿名型をクラスに変換します。
使用状況: クラスで構築し続けたい匿名型がある場合。
理由: 匿名型はローカルでのみ使用する場合に便利です。コードが大きくなるにつれて、それらをクラスに昇格させる簡単な方法があるのは良いことです。
方法
- 匿名 (
var
) 型にカーソルを置きます。 - ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Convert to class を選択します。
自動プロパティと完全なプロパティ間で変換
内容: 自動実装プロパティと完全なプロパティ間で変換します。
使用状況: プロパティのロジックが変更された場合。
理由: 自動実装プロパティと完全なプロパティ間で手動で変換することもできますが、この機能は自動的に作業を行います。
方法
- プロパティ名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次の2つのオプションから選択します
Convert to full property. を選択します。
Use auto property. を選択します。
直接キャストと 'as' 式間で変換
内容: 変数を通常のキャストと as
キーワードを使用した試行キャスト間で変換します。
使用状況: 特定のシナリオでキャストが失敗すると予想される場合 (as
)、またはキャストが失敗することはないと予想される場合 (直接キャスト)。
方法
- 変数にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次の2つのオプションから選択します
Change to cast を選択します。
Change to as
expression. を選択します。
for ループと foreach ステートメント間で変換
内容: コードに for ループがある場合、このリファクタリングを使用して foreach ステートメントに変換できます。
理由: for ループを foreach ステートメントに変換したい理由は以下の通りです
- ループ内でローカルループ変数をアイテムへのインデックスとして以外に使用しない場合。
- コードを簡素化し、初期化、条件、イテレーターセクションでのロジックエラーの可能性を減らしたい場合。
foreach ステートメントを for ループに変換したい理由は以下の通りです
- ループ内でローカルループ変数をアイテムへのアクセス以外にも使用したい場合。
- 多次元配列を反復処理しており、配列要素をより細かく制御したい場合。
方法
foreach
またはfor
キーワードにキャレットを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次の2つのオプションから選択します
Convert to for
を選択します。
Convert to foreach
を選択します。
Get メソッドとプロパティ間で変換
Get メソッドをプロパティに変換
内容: Get メソッドをプロパティに (およびオプションで Set メソッドも) 変換できます。
使用状況: ロジックを含まない Get メソッドがある場合。
方法
- Get メソッド名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- (オプション) Set メソッドがある場合、この時点で Set メソッドも変換できます。Replace <Get method or Set method name> with property を選択します。
プロパティを Get メソッドに変換
内容: プロパティを Get メソッドに変換できます
使用状況: 値の即時設定と取得以上のことを含むプロパティがある場合
方法
- Get メソッド名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Replace <property name> with method を選択します。
if ステートメントと switch ステートメント間で変換
内容: if
ステートメントを switch ステートメント または C# 8.0 の switch 式 に変換します。
使用状況: if
ステートメントを switch
ステートメントまたは switch
式に、またその逆に変換したい場合。
理由: if
ステートメントを使用している場合、このリファクタリングにより switch ステートメントや switch 式への簡単な移行が可能になります。
方法
if
キーワードにカーソルを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
Convert to switch
statement を選択します。
Convert to switch
expression を選択します。
Convert to if
statement を選択します。
通常文字列と逐語的文字列間で変換
内容: 通常文字列リテラルと逐語的文字列リテラル間で変換できます。
使用状況: コードのスペースを節約したい場合、または明瞭性を高めたい場合。
理由: 逐語的文字列リテラルを通常文字列リテラルに変換すると、スペースを節約できます。通常文字列リテラルを逐語的文字列リテラルに変換すると、明瞭性が向上します。
方法
- 通常文字列リテラルまたは逐語的文字列リテラルのいずれかにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションのいずれかから選択します
Convert to regular string を選択します。
Convert to verbatim string を選択します。
クラスをレコードに変換
内容: クラスを C# レコードに変換します。
使用状況: データ保存と不変性に特化したレコードにクラスを素早く変更したい場合。
方法
- クラス名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Convert to positional record を選択します。
ローカル関数をメソッドに変換
内容: ローカル関数をメソッドに変換します。
使用状況: 現在のローカルコンテキストの外で定義したいローカル関数がある場合。
理由: ローカル関数をメソッドに変換して、ローカルコンテキストの外から呼び出せるようにしたい場合。ローカル関数が長くなりすぎた場合にメソッドに変換したいと思うかもしれません。関数を別のメソッドで定義すると、コードが読みやすくなります。
方法
- ローカル関数にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Convert to method を選択します。
数値リテラルを16進数、10進数、または2進数に変換
内容: 数値を16進数、2進数、または10進数間で変換します。
使用状況: 変換を手動で計算することなく、数値を目的の基数に自動的に変換したい場合に使用します。
方法
- 数値リテラルにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のいずれかのオプションを選択します
Convert to decimal を選択します。
Convert to hex を選択します。
Convert to binary を選択します。
プレースホルダーを補間文字列に変換
内容: String.Format
でフォーマットされた結果文字列 (またはプレースホルダー) を補間文字列に変換します。
使用状況: 補間文字列を素早く使用したい場合。
理由: 補間文字列は String.Format
よりも読みやすいバージョンを提供し、変数名に直接アクセスできます。
方法
String.Format
プレースホルダーにカーソルを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Convert to interpolated string を選択します。
通常文字列を補間文字列に変換
内容: 通常の文字列を補間文字列に変更します。
使用状況: コードを整理して読みやすくしたい場合。
方法
- 変換したい文字列にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Convert to interpolated string を選択します。
タプルを構造体に変換
内容: タプルを struct
に変換します。
使用状況: タプルを struct
に素早く変更したい場合、および複数回アクセスしたい固定データがある場合。
方法
-
タプルにカーソルを置きます。
-
⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
-
次のいずれかのオプションを選択します
- Convert to
struct
-> updating usages in containing member を選択します。 - Convert to
struct
-> updating usages in containing type を選択します。 - Convert to
struct
-> updating usages in containing project を選択します。 - Convert to
struct
-> updating usages in dependent projects を選択します。
- Convert to
フィールドのカプセル化
内容: フィールドをプロパティに変換し、そのフィールドのすべての使用箇所を新しく作成されたプロパティを使用するように更新できます。
使用状況: フィールドをプロパティに移動し、そのフィールドへのすべての参照を更新したい場合。
理由: 他のクラスにフィールドへのアクセスを許可したいが、それらのクラスに直接アクセスさせたくない場合。フィールドをプロパティでラップすることで、例えば割り当てられる値を検証するコードを記述できます。
方法
- カプセル化するフィールド名の中にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のいずれかを選択します
Encapsulate field: <fieldname> (and use property) を選択します。
Encapsulate field: <fieldname> (but still use field) を選択します。
比較演算子の生成
内容: IComparable
を実装する型に対して比較演算子を生成できます。
使用状況: IComparable
を実装する型がある場合、比較演算子が自動的に追加されます。
理由: 値型を実装する場合、ValueType
の Equals
メソッドのデフォルト実装よりもパフォーマンスを向上させるために、Equals
メソッドをオーバーライドすることを検討すべきです。
方法
- クラス内または IComparable キーワードにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- ドロップダウンメニューから Generate comparison operators を選択します。
デフォルトコンストラクターの生成
内容: クラス上の新しいデフォルトコンストラクターのコードをすぐに生成できます。
使用状況: 新しいデフォルトコンストラクターを導入し、それを自動的に適切に宣言したい場合。
理由: コンストラクターを使用する前に宣言することもできますが、この機能は自動的に生成します。
方法
- クラス名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Generate constructor <classname>() を選択します。
パラメーターの生成
内容: メソッドパラメーターを自動的に生成します。
使用状況: 現在のコンテキストに存在しないメソッド内の変数を参照し、エラーが発生した場合。コード修正としてパラメーターを生成できます。
理由: コンテキストを失うことなく、メソッドシグネチャを素早く変更できます。
方法
- 変数名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Generate parameter を選択します。
すべてのメンバーを明示的に実装
内容: インターフェースのメソッドをクラスで明示的に定義します。明示的なインターフェース実装は、指定されたインターフェースを介してのみ呼び出されるクラスメンバーです。
使用状況: 次の場合に使用します
- 同じ実装を複数のインターフェースで呼び出したくない場合。
- 2つのインターフェースがプロパティとメソッドなど、同じ名前の異なるメンバーを宣言しているケースを解決したい場合。
方法
- クラスで実装されているインターフェースにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Implement all members explicitly を選択します。
すべてのメンバーを暗黙的に実装
内容: インターフェースのメソッドをクラスで暗黙的に定義します。暗黙的なインターフェース実装とは、インターフェースのメソッドとプロパティがパブリックメソッドとしてクラスに直接追加される場合です。
方法
- クラスで実装されているインターフェースにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Implement interface を選択します。
メソッドのインライン化
内容: メソッドのインラインリファクタリング。
使用状況: 単一のステートメントボディ内で静的、インスタンス、および拡張メソッドの使用箇所を、元のメソッド宣言を削除するオプション付きで置き換えたい場合。
理由: このリファクタリングは、より明確な構文を提供します。
方法
- メソッドの使用箇所にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションのいずれかから選択します
Inline <QualifiedMethodName> を選択して、インラインメソッド宣言を削除します。
Inline and keep <QualifiedMethodName> を選択して、元のメソッド宣言を保持します。
一時変数のインライン化
内容: 一時変数を削除し、その値で置き換えることができます。
使用状況: 一時変数の使用によりコードが理解しにくくなっている場合。
理由: 一時変数を削除することで、コードが読みやすくなる場合があります。
方法
- インライン化する一時変数の中にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Inline temporary variable を選択します。
式のローカル変数を導入
内容: 既存の式を置き換えるために、ローカル変数をすぐに生成できます。
使用状況: ローカル変数に入っていれば後で簡単に再利用できるコードがある場合。
理由: コードを複数回コピー&ペーストして様々な場所で使用することもできますが、操作を一度実行し、結果をローカル変数に格納し、そのローカル変数を全体的に使用する方が良いでしょう。
方法
- 新しいローカル変数に割り当てたい式のところにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
Introduce local -> Introduce local for <expression> を選択します。
Introduce local -> Introduce local for all occurrences of <expression> を選択します。
パラメーターの導入
内容: 既存の式を置き換えるために、新しいパラメーターをすぐに生成できます。
使用状況: パラメーターに入っていれば後で簡単に再利用できるコードがある場合。
理由: コードを複数回コピー&ペーストして様々な場所で使用することもできますが、操作を一度実行し、結果をパラメーターに格納し、そのパラメーターを全体的に使用する方が良いでしょう。
方法
- 新しいパラメーターに割り当てたい式のところにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
Introduce parameter for <expression> -> and update call sites directly を選択します。
Introduce parameter for <expression> -> into extracted method を選択します。
Introduce parameter for <expression> -> into new overload を選択します。
using
ステートメントの導入
内容: using
ステートメント / コードブロックを IDisposable
インスタンスに追加します。
使用状況: 適切に取得、使用、破棄されることを保証したい IDisposable
インスタンスがある場合。
方法
- 新しいパラメーターに割り当てたい式のところにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Introduce
using
statement を選択します。
条件式と論理演算の反転
内容: 条件式または条件 and
\ or
演算子を反転できます。
使用状況: 反転するとより理解しやすい条件式または条件 and
\ or
演算子がある場合。
理由: 式または条件 and
\ or
演算子を手動で反転すると、時間がかかり、エラーを導入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
方法
- 条件式または条件
and
\or
演算子にカーソルを置きます。 - ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Invert conditional または Replace
&&
with||
を選択します。
if の反転
内容: コードの意味を変えずに if
または if else
ステートメントを反転できます。
使用状況: 反転するとより理解しやすい if
または if else
ステートメントがある場合。
理由: if
または if else
ステートメントを手動で反転すると、時間がかかり、エラーを導入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
方法
if
またはif else
ステートメントにカーソルを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Invert
if
を選択します。
メンバーを静的にする
内容: メンバーを静的にします。
使用状況: 非静的メンバーを静的にしたい場合。
理由: 静的メンバーは可読性を向上させます。特定のコードが分離されていると知ることで、理解し、読み直し、再利用が容易になります。
方法
- メンバー名にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Make static を選択します。
宣言を参照の近くに移動
内容: 変数宣言を使用箇所に近づけることができます。
使用状況: より狭いスコープにできる変数宣言がある場合。
理由: そのままにしておくこともできますが、可読性の問題や情報隠蔽を引き起こす可能性があります。これは可読性を向上させるためのリファクタリングの機会です。
方法
- 変数宣言にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Move declaration near reference を選択します。
型を一致するファイルに移動
内容: 選択した型を同じ名前の別のファイルに移動できます。
使用状況: 同じファイルに複数のクラス、構造体、インターフェースなどがあり、それらを分けたい場合。
理由: 複数の型を同じファイルに配置すると、それらの型を見つけるのが難しくなる可能性があります。型を同じ名前のファイルに移動することで、コードが読みやすくなり、ナビゲーションが容易になります。
方法
- 型が定義されている名前の中にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Move type to <typename>.cs を選択します。
for ステートメントの反転
内容: for
ステートメントを反転できます。
使用状況: for
ステートメントの意味と反復方法を反転したい場合。
理由: for
ステートメントを手動で反転すると、時間がかかり、エラーを導入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。
方法
for
ステートメントにカーソルを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Reverse
for
statement を選択します。
if ステートメントの分割または結合
内容: if
ステートメントを分割または結合します。
使用状況: &&
または ||
演算子を使用する if
ステートメントをネストされた if
ステートメントに分割したい場合、または if
ステートメントを外側の if
ステートメントと結合したい場合。
理由: これはスタイルの好みの問題です。
方法
if
ステートメントを分割したい場合
if
ステートメント内の&&
または||
演算子の近くにカーソルを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Split into nested
if
statements を選択します。
内側の if
ステートメントを外側の if
ステートメントと結合したい場合
- 内側の
if
キーワードにカーソルを置きます。 - ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Merge with nested
if
statement を選択します。
明示的な型を使用
内容: このリファクタリングを使用して、ローカル変数宣言の var
を明示的な型に置き換えます。
理由: コードの可読性を向上させるため、または宣言で変数を初期化したくない場合。
ただし、変数が匿名型で初期化され、オブジェクトのプロパティが後でアクセスされる場合は、var を使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。
方法
var
キーワードにキャレットを置きます。- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Use explicit type instead of
var
を選択します。
暗黙的な型を使用
内容: このリファクタリングを使用して、ローカル変数宣言の明示的な型を var
に置き換えます。
理由: 個人のコーディング規約に合わせるため、および表示されるコードを少なくするため。Var は、変数が匿名型で初期化され、オブジェクトのプロパティが後でアクセスされる場合に使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。
方法
- 明示的な型キーワードにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Use implicit type を選択します。
ラムダ式またはブロックボディを使用
内容: ラムダ式を式ボディまたはブロックボディを使用するようにリファクタリングできます。
使用状況: ラムダ式が式ボディまたはブロックボディのいずれかを使用する方が好ましい場合。
理由: ラムダ式は、ユーザーの好みに応じて可読性を向上させるためにリファクタリングできます。
方法
- ラムダ演算子の右側にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のいずれかを選択します
Use block body for lambda expressions を選択します。
Use expression body for lambda expressions を選択します。
再帰パターンを使用
内容: コードブロックを再帰パターンを使用するように変換します。このリファクタリングは、switch ステートメント、プロパティパターンマッチング、タプルパターンマッチング、および位置パターンマッチングで機能します。
使用状況: 再帰パターンを使用すると、コードがより読みやすく/きれいにすることができます。
方法
- 再帰パターンに変換したい式にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のいずれかを選択します
Convert switch
statement to expression を選択します。
Use recursive patterns を選択します。
リファクタリングの折り返し、インデント、および配置
コールチェーンの折り返しと配置
内容: メソッド呼び出しのチェーンを折り返して配置できます。
使用状況: 1つのステートメント内に複数のメソッド呼び出しからなる長いチェーンがある場合。
理由: 長いリストは、ユーザーの好みに応じて折り返したりインデントしたりすると、読みやすくなります。
方法
- コールチェーンのいずれかにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Wrap call chain または Wrap and align call chain を選択してリファクタリングを適用します。
パラメーターまたは引数の折り返し、インデント、および配置
内容: パラメーターまたは引数を折り返し、インデントし、配置できます。
使用状況: 複数のパラメーターまたは引数を持つメソッド宣言または呼び出しがある場合。
理由: 長いパラメーターまたは引数のリストは、ユーザーの好みに応じて折り返したりインデントしたりすると、読みやすくなります。
方法
- パラメーターリストにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
Wrap every parameter -> Align wrapped parameters を選択します。
Wrap every parameter -> Indent all parameters を選択します。
Wrap every parameter -> Indent wrapped parameters を選択します。
二項式の折り返し
内容: 二項式を折り返すことができます。
使用状況: 二項式がある場合。
理由: 二項式は、ユーザーの好みに合わせて折り返すと読みやすくなります。
方法
- 二項式にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
- Wrap expression を選択してリファクタリングを適用します。