C# のクイック アクションとリファクタリング

Visual Studio Code では、ソース コードをリファクタリングするための多くの方法に加え、コーディング中にコードを生成したり問題を解決したりするためのクイック修正が提供されています。これらにアクセスするには、表示される「電球」アイコンをクリックするか、クイック修正コマンド ⌘. (Windows、Linux は Ctrl+.) を使用して、クイック修正とリファクタリング オプションの一覧を表示します。また、エディターを右クリックして リファクタリング ⌃⇧R (Windows、Linux は Ctrl+Shift+R) を選択すると、リファクタリング オプションのみを表示することもできます。

サポートされているリファクタリングとクイック修正

await の追加

内容: 関数呼び出しに await キーワードを追加します。

使用場面: 非同期メソッド内で関数を呼び出している場合。

手順

  1. 関数呼び出しの場所にキャレットを置きます (多くの場合、赤色の下線が表示されています)。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. await の追加 を選択します。

Add await example

メンバーからのコンストラクター パラメーターの追加

内容: 選択したクラス メンバーに基づいて、パラメーターを持つ新しいコンストラクターを生成します。

使用場面: 新しいコンストラクターを導入し、すべての正しいパラメーターを使用して自動的に適切に宣言したい場合。

理由: 使用する前に手動でコンストラクターを宣言することもできますが、この機能を使用すると自動的に生成されます。

手順

  1. コンストラクターのパラメーターとして追加したいクラス メンバーをハイライトします。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. コンストラクター <クラス名>(<メンバー型>, <メンバー型>, ...) の生成 を選択します。

Add constructor parameters from members example

DebuggerDisplay 属性の追加

内容: DebuggerDisplay 属性は、デバッガーの変数ウィンドウでオブジェクト、プロパティ、またはフィールドをどのように表示するかを制御します。

使用場面: コード内でプログラムによってデバッガー内の プロパティをピン留め したい場合。

理由: プロパティをピン留めすると、そのプロパティをデバッガー内のオブジェクトのプロパティ リストの先頭に表示させることで、プロパティによるオブジェクトの検査を迅速に行えるようになります。

手順

  1. 型、デリゲート、プロパティ、またはフィールドのいずれかにカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して クイック アクションとリファクタリング メニューを表示し、DebuggerDisplay 属性の追加 を選択します。
  3. デフォルトの ToString() を返す自動メソッドと共に DebuggerDisplay 属性が追加されます。

Add DebuggerDisplay attribute example

明示的キャストの追加

内容: 使用状況に基づいて、式に明示的なキャストを自動的に追加できます。

使用場面: 式に明示的なキャストを追加する必要があり、それを自動的に適切に割り当てたい場合。

理由: 手動で式に明示的なキャストを追加することもできますが、この機能はコードのコンテキストに基づいて自動的に追加します。

手順

  1. エラー箇所にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 明示的キャストの追加 を選択します。

ファイル ヘッダーの追加

内容: EditorConfig を使用して、既存のファイル、プロジェクト、およびソリューションにファイル ヘッダーを追加します。

使用場面: ファイル、プロジェクト、およびソリューションにファイル ヘッダーを簡単に追加したい場合。

理由: 著作権保護などの目的で、チームからファイル ヘッダーを含めることが求められている場合。

手順

  1. プロジェクトまたはソリューションにまだ EditorConfig がない場合は、追加します。
  2. EditorConfig ファイルに次のルールを追加します: file_header_template
  3. ルールの値に、適用したいヘッダー テキストを設定します。ファイル名のプレースホルダーとして {fileName} を使用できます。
  4. 任意の C# ファイルの最初の行にキャレットを置きます。
  5. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  6. ファイル ヘッダーの追加 を選択します。

不足している using / インポートの追加

内容: コピー & ペーストしたコードに必要なインポートまたは using ディレクティブを即座に追加できます。

使用場面: プロジェクト内の別の場所や他のソースからコードをコピーして新しいコードに貼り付けるのは一般的な作業です。このクイック アクションは、コピー & ペーストしたコードで不足しているインポート ディレクティブを見つけ、追加するように促します。このコード修正により、プロジェクト間の参照を追加することもできます。

理由: クイック アクションが必要なインポートを自動的に追加するため、コードに必要な using ディレクティブを手動でコピーする必要がありません。

手順

  1. 必要な using ディレクティブを含めずに、あるファイルからコードをコピーして新しいファイルに貼り付けます。発生したエラーに対して、不足している using ディレクティブを追加するコード修正が表示されます。
  2. ⌘. (Windows、Linux は Ctrl+.) を選択して、クイック アクションとリファクタリング メニューを開きます。
  3. Using <参照名> を選択して、不足している参照を追加します。

Add missing  / imports example

名前付き引数の追加

内容: 関数呼び出しの指定されたパラメーター値に、名前付き引数を付加します。

使用場面: パラメーターが多いメソッドがある場合、名前付き引数を追加することでコードの可読性を高めることができます。

手順

  1. 関数呼び出し内のパラメーターにカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 引数名 <パラメーター名> の追加 を選択します。

Add named argument example

匿名型からクラスへの変換

内容: 匿名型をクラスに変換します。

使用場面: 匿名型を使用しているが、それをクラスとしてさらに拡張していきたい場合。

理由: 匿名型はローカルでのみ使用する場合には便利です。コードが成長するにつれて、それらをクラスに昇格させる簡単な方法があるのは有益です。

手順

  1. 匿名型 (var) の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. クラスに変換 を選択します。

Convert anonymous type to class example

自動プロパティと完全なプロパティの間の変換

内容: 自動実装プロパティと完全なプロパティの間で変換します。

使用場面: プロパティのロジックが変更された場合。

理由: 自動実装プロパティから完全なプロパティへの変換は手動でも可能ですが、この機能を使用すると作業が自動的に行われます。

手順

  1. プロパティ名の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次の 2 つのオプションから選択します

完全なプロパティに変換。 を選択します。

Convert to full property example

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

Use auto property example

直接キャストと 'as' 式の間の変換

内容: 変数のキャストを、通常のキャストと as キーワードを使用した試行キャストの間で変換します。

使用場面: 特定のシナリオでキャストが失敗することが予想される場合 (as) や、キャストが失敗することが決してないと予想される場合 (直接キャスト)。

手順

  1. 変数の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して クイック アクションとリファクタリング メニューを表示します。
  3. 次の 2 つのオプションから選択します

キャストに変更 を選択します。

Change to cast example

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

Change to  expression example

for ループと foreach ステートメントの間の変換

内容: コード内に for ループがある場合、このリファクタリングを使用して foreach ステートメントに変換できます。

理由: for ループを foreach ステートメントに変換したい理由には以下が含まれます

  • ループ内でローカル ループ変数を、アイテムにアクセスするためのインデックスとして以外に使用していない場合。
  • コードを簡素化し、初期化子、条件、反復子のセクションで論理エラーが発生する可能性を減らしたい場合。

foreach ステートメントを for ループに変換したい理由には以下が含まれます

  • ループ内でローカル ループ変数を、単なるアイテムへのアクセス以外に使用したい場合。
  • 多次元配列を反復処理しており、配列要素をより詳細に制御したい場合。

手順

  1. foreach または for キーワードにキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次の 2 つのオプションから選択します

for に変換 を選択します。

Convert to  example

foreach に変換 を選択します。

Convert to

Get メソッドとプロパティの間の変換

Get メソッドからプロパティへの変換

内容: Get メソッドをプロパティに変換できます (オプションで Set メソッドも)。

使用場面: ロジックを含まない Get メソッドがある場合。

手順

  1. Get メソッド名の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. (オプション) Set メソッドがある場合は、このときに Set メソッドも変換できます。<Get メソッドまたは Set メソッド名> をプロパティで置換 を選択します。

Replace Get method with property example

プロパティから Get メソッドへの変換

内容: プロパティを Get メソッドに変換できます。

使用場面: 単なる値の設定や取得以上の処理を含むプロパティがある場合。

手順

  1. Get メソッド名の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. <プロパティ名> をメソッドで置換 を選択します。

Replace property name with method example

if と switch ステートメントの間の変換

内容: if ステートメントを switch ステートメント または C# 8.0 の switch 式 に変換します。

使用場面: if ステートメントを switch ステートメントまたは switch 式に変換したい場合、またはその逆を行いたい場合。

理由: if ステートメントを使用している場合、このリファクタリングにより switch ステートメントや switch 式への移行が容易になります。

手順

  1. if キーワードの中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションから選択します

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

Convert to  statement example

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

Convert to  expression example

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

Convert to  statement example

通常の文字列と逐語的文字列の間の変換

内容: 通常の文字列リテラルと逐語的(verbatim)文字列リテラルの間で変換できます。

使用場面: スペースを節約したい場合、またはコードをより明確にしたい場合。

理由: 逐語的文字列リテラルを通常の文字列リテラルに変換すると、スペースの節約に役立つことがあります。通常の文字列リテラルを逐語的文字列リテラルに変換すると、コードがより明確になることがあります。

手順

  1. 通常の文字列または逐語的文字列リテラルのいずれかにキャレットを置きます
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションのいずれかを選択します

通常の文字列に変換 を選択します。

逐語的文字列に変換 を選択します。

クラスをレコードに変換

内容: クラスを C# のレコード (record) に変換します。

使用場面: データの保存と不変性に特化したレコードに、クラスをすばやく変更したい場合。

手順

  1. クラス名の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 位置指定レコード (positional record) に変換 を選択します。

Convert class to record before example

Convert class to record after example

ローカル関数をメソッドに変換

内容: ローカル関数をメソッドに変換します。

使用場面: 現在のローカル コンテキストの外で定義したいローカル関数がある場合。

理由: ローカル関数をメソッドに変換すると、ローカル コンテキストの外から呼び出すことができるようになります。また、ローカル関数が長くなりすぎた場合にメソッドに変換したいこともあります。別のメソッドで関数を定義すると、コードが読みやすくなります。

手順

  1. ローカル関数の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. メソッドに変換 を選択します。

Convert local function to method example

数値リテラルを 16 進数、10 進数、または 2 進数に変換

内容: 数値を 16 進数、2 進数、または 10 進数の間で変換します。

使用場面: 手動で計算することなく、数値を目的の基数に自動的に変換したい場合に使用します。

手順

  1. 数値リテラルの上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションのいずれかを選択します

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

Convert to decimal example

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

Convert to hex example

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

Convert to binary example

プレースホルダーを補完入り文字列に変換

内容: String.Format でフォーマットされた結果文字列 (またはプレースホルダー) を補完入り文字列 (interpolated string) に変換します。

使用場面: 補完入り文字列をすばやく作成したい場合に使用します。

理由: 補完入り文字列は String.Format よりも読みやすく、変数名に直接アクセスできます。

手順

  1. String.Format のプレースホルダーの上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 補完入り文字列に変換 を選択します。

Convert placeholder to interpolated string example

通常の文字列を補完入り文字列に変換

内容: 通常の文字列を補完入り文字列に変更します。

使用場面: コードを整理して読みやすくしたい場合に使用します。

手順

  1. 変換したい文字列の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 補完入り文字列に変換 を選択します。

Convert to interpolated string before example

Convert to interpolated string after example

タプルを構造体に変換

内容: タプルを struct (構造体) に変換します

使用場面: タプルを struct にすばやく変更したい場合や、複数回アクセスしたい固定データを持たせたい場合に使用します。

手順

  1. タプルの上にカーソルを置きます。

  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。

  3. 次のオプションのいずれかを選択します

    • struct に変換 -> 包含するメンバー内の使用箇所を更新 を選択します
    • struct に変換 -> 包含する型内の使用箇所を更新 を選択します
    • struct に変換 -> 包含するプロジェクト内の使用箇所を更新 を選択します
    • struct に変換 -> 依存するプロジェクト内の使用箇所を更新 を選択します

Convert tuple to  options

Convert tuple to  example

フィールドのカプセル化

内容: フィールドをプロパティに変更し、そのフィールドのすべての使用箇所を新しく作成されたプロパティを使用するように更新します。

使用場面: フィールドをプロパティに移動し、そのフィールドへのすべての参照を更新したい場合。

理由: 他のクラスにフィールドへのアクセスを許可したいが、それらのクラスが直接アクセスすることは望まない場合。フィールドをプロパティでラップすることで、例えば割り当てられる値を検証するコードを記述できるようになります。

手順

  1. カプセル化するフィールドの名前の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のいずれかを選択します

フィールドのカプセル化: <フィールド名> (およびプロパティを使用) を選択します。

Encapsulate field and use property example

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

Encapsulate field but still use field example

比較演算子の生成

内容: IComparable を実装する型に対して比較演算子を生成できます。

使用場面: IComparable を実装する型がある場合に、自動的に比較演算子を追加します。

理由: 値型を実装する場合、ValueTypeEquals メソッドのデフォルトの実装よりもパフォーマンスを向上させるために、Equals メソッドをオーバーライドすることを検討する必要があります。

手順

  1. クラスの内部または IComparable キーワードの上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. ドロップダウン メニューから 比較演算子の生成 を選択します。

デフォルト コンストラクターの生成

内容: クラスの新しいデフォルト コンストラクターのコードを即座に生成できます。

使用場面: 新しいデフォルト コンストラクターを導入し、自動的に適切に宣言したい場合。

理由: 使用する前に手動でコンストラクターを宣言することもできますが、この機能を使用すると自動的に生成されます。

手順

  1. クラス名の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. コンストラクター <クラス名>() の生成 を選択します。

Generate default constructor example

パラメーターの生成

内容: メソッド パラメーターを自動的に生成します。

使用場面: 現在のコンテキストに存在しない変数をメソッド内で参照してエラーが発生した場合、コード修正としてパラメーターを生成できます。

理由: コンテキストを失うことなく、メソッド シグネチャを素早く変更できます。

手順

  1. 変数名の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. パラメーターの生成 を選択します。

Generate parameter example

すべてのメンバーを明示的に実装する

内容: インターフェイスのメソッドをクラス内で明示的に定義します。明示的なインターフェイスの実装は、指定されたインターフェイスを通じてのみ呼び出されるクラス メンバーです。

使用場面: 次のような場合に使用します

  • 複数のインターフェイスに対して同じ実装が呼び出されるのを避けたい場合。
  • 2 つのインターフェイスがそれぞれ同じ名前の異なるメンバー (プロパティとメソッドなど) を宣言している状況を解決したい場合。

手順

  1. クラスで実装されているインターフェイスの上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. すべてのメンバーを明示的に実装する を選択します

Implement all members explicitly example

すべてのメンバーを暗黙的に実装する

内容: インターフェイスのメソッドをクラス内で暗黙的に定義します。暗黙的なインターフェイスの実装とは、インターフェイスのメソッドやプロパティがパブリック メソッドとしてクラスに直接追加されることです。

手順

  1. クラスで実装されているインターフェイスの上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. インターフェイスを実装する を選択します

Implement all members implicitly

メソッドのインライン化

内容: メソッドのインライン化リファクタリング。

使用場面: 単一のステートメント本体内にある static、インスタンス、および拡張メソッドの使用箇所を置換したい場合。元のメソッド宣言を削除するオプションもあります。

理由: このリファクタリングにより、より明確な構文が提供されます。

手順

  1. メソッドの使用箇所にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションのいずれかを選択します

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

Inline method example

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

Inline and keep method example

一時変数のインライン化

内容: 一時変数を取り除き、代わりにその値で置き換えることができます。

使用場面: 一時変数を使用することでコードが理解しにくくなっている場合。

理由: 一時変数を削除することで、コードが読みやすくなる可能性があります。

手順

  1. インライン化する一時変数の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 一時変数のインライン化 を選択します。

Inline temporary variable example

式のローカル変数を導入する

内容: 既存の式を置き換えるためのローカル変数を即座に生成できます。

使用場面: ローカル変数にすれば後で簡単に再利用できそうなコードがある場合。

理由: コードを何度もコピーして貼り付けて様々な場所で使用することもできますが、操作を一度実行して結果をローカル変数に保存し、そのローカル変数を全体で使用する方が良いです。

手順

  1. 新しいローカル変数に割り当てたい式の上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションから選択します

ローカルの導入 -> <式> のローカルを導入 を選択します

Introduce local for expression example

ローカルの導入 -> <式> のすべての出現箇所にローカルを導入 を選択します

パラメーターを導入する

内容: 既存の式を置き換えるための新しいパラメーターを即座に生成できます。

使用場面: パラメーターにすれば後で簡単に再利用できそうなコードがある場合。

理由: コードを何度もコピーして貼り付けて様々な場所で使用することもできますが、操作を一度実行して結果をパラメーターに保存し、そのパラメーターを全体で使用する方が良いです。

手順

  1. 新しいパラメーターに割り当てたい式の上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションから選択します

<式> のパラメーターを導入 -> 呼び出し元を直接更新 を選択します

Update call sites directly example

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

Introduce parameter into extracted method example

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

Introduce parameter into new overload example

using ステートメントを導入する

内容: IDisposable インスタンスに using ステートメント / コード ブロックを追加します。

使用場面: IDisposable インスタンスを確実に取得、使用、および破棄したい場合。

手順

  1. 新しいパラメーターに割り当てたい式の上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. using ステートメントを導入する を選択します。

Introduce  statement example

条件式と論理演算を反転する

内容: 条件式、または条件付き and \ or 演算子を反転できます。

使用場面: 反転させたほうが理解しやすい条件式や条件付き and \ or 演算子がある場合。

理由: 手動で式や条件付き and \ or 演算子を反転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。

手順

  1. 条件式、または条件付き and \ or 演算子の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 条件を反転 または &&|| で置換 を選択します

Invert conditional example

Replace  with  example

if の反転

内容: コードの意味を変えずに if または if else ステートメントを反転させることができます。

使用場面: 反転させたほうが理解しやすい if または if else ステートメントがある場合。

理由: 手動で if または if else ステートメントを反転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。

手順

  1. if または if else ステートメントの中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. if の反転 を選択します。

Invert  example

メンバーを static にする

内容: メンバーを static にします。

使用場面: 非 static なメンバーを static にしたい場合。

理由: static メンバーは可読性を向上させます。特定のコードが隔離されていることを知ることで、理解、再読、再利用が容易になります。

手順

  1. メンバー名の上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. static にする を選択します。

Make member static example

宣言を参照の近くに移動する

内容: 変数宣言を使用箇所の近くに移動できます。

使用場面: より狭いスコープに配置できる変数宣言がある場合。

理由: そのままにしておくこともできますが、可読性の問題や情報の隠蔽が発生する可能性があります。これは可読性を向上させるためのリファクタリングの機会です。

手順

  1. 変数宣言の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 宣言を参照の近くに移動する を選択します。

Move declaration near reference example

型を一致するファイルに移動する

内容: 選択した型を同じ名前の別のファイルに移動できます。

使用場面: 同じファイル内に複数のクラス、構造体、インターフェイスなどがあり、それらを分離したい場合。

理由: 同じファイルに複数の型を配置すると、それらの型を見つけるのが難しくなることがあります。型を同じ名前のファイルに移動することで、コードの可読性が高まり、ナビゲーションが容易になります。

手順

  1. 型が定義されている名前の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 型を <型名>.cs に移動 を選択します。

Move type to matching file example

for ステートメントの逆転

内容: for ステートメントを逆転させることができます。

使用場面: for ステートメントの意味と反復方法を逆にしたい場合に使用します。

理由: 手動で for ステートメントを逆転させると時間がかかり、エラーが混入する可能性があります。このコード修正は、このリファクタリングを自動的に行うのに役立ちます。

手順

  1. for ステートメントの中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. for ステートメントの逆転 を選択します。

Reverse  statements example

if ステートメントの分割またはマージ

内容: if ステートメントを分割またはマージします。

使用場面: && または || 演算子を使用している if ステートメントを入れ子になった if ステートメントに分割したい場合、あるいは if ステートメントを外側の if ステートメントとマージしたい場合。

理由: スタイルの好みの問題です。

手順

if ステートメントを分割したい場合

  1. if ステートメントの && または || 演算子の近くにカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 入れ子になった if ステートメントに分割 を選択します。

Split into nested  statements example

内側の if ステートメントを外側の if ステートメントとマージしたい場合

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

Merge with nested  statements example

明示的な型の使用

内容: このリファクタリングを使用して、ローカル変数宣言の var を明示的な型で置き換えます。

理由: コードの可読性を向上させるため、または宣言時に変数を初期化したくない場合。

ただし、変数が匿名型で初期化され、後でそのオブジェクトのプロパティにアクセスする場合は、var を使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。

手順

  1. var キーワードの上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. var の代わりに明示的な型を使用する を選択します。

Use explicit type instead of  example

暗黙的な型 (var) の使用

内容: このリファクタリングを使用して、ローカル変数宣言の明示的な型を var で置き換えます。

理由: 個人のコーディング規約に合わせるため、および表示されるコード量を減らすため。変数が匿名型で初期化され、後でそのオブジェクトのプロパティにアクセスする場合は、var を使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (C#) を参照してください。

手順

  1. 明示的な型のキーワードの上にキャレットを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 暗黙的な型を使用する を選択します。

Use implicit type example

ラムダ式またはブロック本体の使用

内容: ラムダ式をリファクタリングして、式形式の本体またはブロック形式の本体を使用するようにします。

使用場面: ラムダ式で式形式の本体またはブロック形式の本体のいずれかを使用したい場合。

理由: ラムダ式は、ユーザーの好みに応じて可読性を向上させるためにリファクタリングできます。

手順

  1. ラムダ演算子の右側にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のいずれかを選択します

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

Use block body for lambda expressions example

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

Use expression body for lambda expressions

再帰パターンの使用

内容: コード ブロックを再帰パターンを使用するように変換します。このリファクタリングは、switch ステートメント、プロパティ パターン マッチング、タプル パターン マッチング、および位置指定パターン マッチングで機能します。

使用場面: 再帰パターンを使用すると、コードがより読みやすく、クリーンになる場合があります。

手順

  1. 再帰パターンに変換したい式の上にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のいずれかを選択します

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

Convert  statement to expression example

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

Use recursive patterns before example

Use recursive patterns after example

折り返し、インデント、および配置のリファクタリング

メソッド チェーンの折り返しと整列

内容: メソッド呼び出しのチェーンを折り返して整列させることができます。

使用場面: 1 つのステートメント内に複数のメソッド呼び出しからなる長いチェーンがある場合。

理由: 長いリストは、ユーザーの好みに応じて折り返したりインデントしたりすると読みやすくなります。

手順

  1. 呼び出しチェーンのいずれかにカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. メソッド チェーンの折り返し または メソッド チェーンの折り返しと整列 を選択してリファクタリングを適用します。

Wrap and align call chain example

パラメーターまたは引数の折り返し、インデント、整列

内容: パラメーターまたは引数を折り返し、インデント、および整列させることができます。

使用場面: 複数のパラメーターまたは引数を持つメソッドの宣言または呼び出しがある場合。

理由: パラメーターや引数の長いリストは、ユーザーの好みに応じて折り返したりインデントしたりすると読みやすくなります。

手順

  1. パラメーター リストの中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 次のオプションから選択します

すべてのパラメーターを折り返す -> 折り返されたパラメーターを整列する を選択します

Align wrapped parameters example

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

Indent all parameters example

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

Indent wrapped parameters example

二項式の折り返し

内容: 二項式を折り返すことができます。

使用場面: 二項式がある場合。

理由: 二項式は、ユーザーの好みに応じて折り返すと読みやすくなります。

手順

  1. 二項式の中にカーソルを置きます。
  2. ⌘. (Windows、Linux は Ctrl+.) を押して、クイック アクションとリファクタリング メニューを表示します。
  3. 式の折り返し を選択してリファクタリングを適用します。

Wrap expression example

© . This site is unofficial and not affiliated with Microsoft.