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+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
await
の追加 を選択します。
メンバーからコンストラクターパラメーターを追加
内容: 選択したクラスメンバーに基づいてパラメーターを持つ新しいコンストラクターを生成します。
タイミング: 新しいコンストラクターを導入し、すべての正しいパラメーターを使用して自動的に宣言する場合。
理由: 使用する前にコンストラクターを宣言できますが、この機能は自動的に生成します。
ハウツー
- コンストラクターにパラメーターとして追加するクラスメンバーを強調表示します。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- コンストラクター <classname>(<membertype>, <membertype>, <etc.>) の生成 を選択します。
DebuggerDisplay 属性の追加
内容: DebuggerDisplay 属性 は、デバッガー変数ウィンドウでのオブジェクト、プロパティ、またはフィールドの表示方法を制御します。
タイミング: コード内でプログラムでデバッガー内の プロパティをピン留めする 場合。
理由: プロパティをピン留めすると、デバッガー内のオブジェクトのプロパティリストの先頭にそのプロパティをポップアップ表示することで、プロパティによってオブジェクトをすばやく検査できます。
ハウツー
- カーソルを型、デリゲート、プロパティ、またはフィールドのいずれかに置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーし、
DebuggerDisplay
属性の追加 を選択します。 DebuggerDisplay
属性は、デフォルトのToString()
を返す自動メソッドとともに追加されます。
明示的なキャストの追加
内容: 使用状況に基づいて、明示的なキャストを式に自動的に追加できます。
タイミング: 明示的なキャストを式に追加する必要があり、それを自動的に適切に割り当てる場合。
理由: 明示的なキャストを式に手動で追加できますが、この機能はコードコンテキストに基づいて自動的に追加します。
ハウツー
- エラーにキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 明示的なキャストの追加 を選択します。
ファイルヘッダーの追加
内容: EditorConfig を使用して、既存のファイル、プロジェクト、およびソリューションにファイルヘッダーを追加します。
タイミング: ファイル、プロジェクト、およびソリューションにファイルヘッダーを簡単に追加する場合。
理由: チームが著作権の目的でファイルヘッダーを含めることを要求している場合。
ハウツー
- まだない場合は、EditorConfig をプロジェクトまたはソリューションに追加します。
- 次のルールを EditorConfig ファイルに追加します:
file_header_template
。 - ルール値を、適用するヘッダーテキストと等しくなるように設定します。
{fileName}
をファイル名のプレースホルダーとして使用できます。 - 任意の C# ファイルの最初の行にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- ファイルヘッダーの追加 を選択します。
不足している using / imports の追加
内容: コピーアンドペーストされたコードに必要なインポートまたは using ディレクティブをすぐに追加できます。
タイミング: プロジェクトまたは他のソースのさまざまな場所からコードをコピーして、新しいコードに貼り付けることは一般的な方法です。このクイックアクションは、コピーアンドペーストされたコードの不足しているインポートディレクティブを見つけ、それらを追加するように促します。このコード修正は、プロジェクトからプロジェクトへの参照を追加することもできます。
理由: クイックアクションは必要なインポートを自動的に追加するため、コードに必要な using ディレクティブを手動でコピーする必要はありません。
ハウツー
- 必要な using ディレクティブを含めずに、ファイルからコードをコピーして新しいファイルに貼り付けます。結果のエラーには、不足している using ディレクティブを追加するコード修正が伴います。
- ⌘. (Windows、Linux Ctrl+.) を選択して、クイックアクションとリファクタリング メニューを開きます。
- Using <参照> を選択して、不足している参照を追加します。
名前付き引数の追加
内容: 関数呼び出しで指定されたパラメーター値に名前付き引数を追加します。
タイミング: パラメーターが多いメソッドがある場合は、名前付き引数を追加してコードを読みやすくすることができます。
ハウツー
- 関数呼び出し内のパラメーターにカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 引数名 <パラメーター名> の追加 を選択します。
匿名型をクラスに変換
内容: 匿名型をクラスに変換します。
タイミング: クラスで引き続き構築する匿名型がある場合。
理由: 匿名型はローカルでのみ使用する場合に役立ちます。コードが大きくなるにつれて、クラスに昇格させる簡単な方法があると便利です。
ハウツー
- カーソルを匿名 (
var
) 型に置きます。 - ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- クラスに変換 を選択します。
自動プロパティと完全プロパティ間の変換
内容: 自動実装プロパティから完全プロパティの間で変換します。
タイミング: プロパティのロジックが変更された場合。
理由: 自動実装プロパティから完全プロパティへの変換は手動で行うことができますが、この機能は自動的に実行します。
ハウツー
- プロパティ名にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次の 2 つのオプションから選択します
完全プロパティに変換 を選択します。
自動プロパティを使用 を選択します。
ダイレクトキャストと 'as' 式の間の変換
内容: 変数を通常のキャストと as
キーワードを使用した try キャストの間で変換します。
タイミング: 特定のシナリオ (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+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- すべてのメンバーを明示的に実装 を選択します
すべてのメンバーを暗黙的に実装
内容: インターフェースのメソッドをクラスで暗黙的に定義します。暗黙的なインターフェース実装とは、インターフェースのメソッドとプロパティがパブリックメソッドとしてクラスに直接追加される場合です。
ハウツー
- カーソルをクラスで実装されているインターフェースに置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- インターフェースの実装 を選択します
メソッドのインライン化
内容: メソッドのインライン化リファクタリング。
タイミング: 単一のステートメント本体内で静的、インスタンス、および拡張メソッドの使用箇所を、元のメソッド宣言を削除するオプションとともに置き換えたい場合。
理由: このリファクタリングは、より明確な構文を提供します。
ハウツー
- キャレットをメソッドの使用箇所に置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のいずれかのオプションから選択します
インラインメソッド宣言を削除するには、<QualifiedMethodName> をインライン化 を選択します
元のメソッド宣言を保持するには、<QualifiedMethodName> をインライン化して保持 を選択します
一時変数のインライン化
内容: 一時変数を削除し、代わりにその値で置き換えることができます。
タイミング: 一時変数の使用により、コードが理解しにくくなる場合。
理由: 一時変数を削除すると、コードが読みやすくなる場合があります。
ハウツー
- インライン化する一時変数の内側にカーソルを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 一時変数のインライン化 を選択します。
式のローカル変数の導入
内容: 既存の式を置き換えるローカル変数をすぐに生成できます。
タイミング: ローカル変数にある場合、後で簡単に再利用できるコードがある場合。
理由: コードをコピーして複数回貼り付けてさまざまな場所で使用できますが、操作を 1 回実行し、結果をローカル変数に格納して、ローカル変数を全体で使用する方が適切です。
ハウツー
- 新しいローカル変数に割り当てる式にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
ローカル変数を導入 -> <式> のローカル変数を導入 を選択します
ローカル変数を導入 -> <式> のすべての出現箇所のローカル変数を導入 を選択します
パラメーターの導入
内容: 既存の式を置き換える新しいパラメーターをすぐに生成できます。
タイミング: パラメーターにある場合、後で簡単に再利用できるコードがある場合。
理由: コードをコピーして複数回貼り付けてさまざまな場所で使用できますが、操作を 1 回実行し、結果をパラメーターに格納して、パラメーターを全体で使用する方が適切です。
ハウツー
- 新しいパラメーターに割り当てる式にキャレットを置きます。
- ⌘. (Windows、Linux Ctrl+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 次のオプションから選択します
<式> のパラメーターを導入 -> および呼び出しサイトを直接更新 を選択します
<式> のパラメーターを導入 -> 抽出されたメソッドに を選択します
<式> のパラメーターを導入 -> 新しいオーバーロードに を選択します
using
ステートメントの導入
内容: using
ステートメント / コードブロックを IDisposable
インスタンスに追加します。
タイミング: 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+.) を押して、クイックアクションとリファクタリング メニューをトリガーします。
- 式を折り返す を選択して、リファクタリングを適用します。