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. コンストラクター <classname>(<membertype>, <membertype>, <etc.>) の生成 を選択します。

Add constructor parameters from members example

DebuggerDisplay 属性の追加

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

タイミング: コード内でプログラムでデバッガー内の プロパティをピン留めする 場合。

理由: プロパティをピン留めすると、デバッガー内のオブジェクトのプロパティリストの先頭にそのプロパティをポップアップ表示することで、プロパティによってオブジェクトをすばやく検査できます。

ハウツー

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

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 / imports の追加

内容: コピーアンドペーストされたコードに必要なインポートまたは 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 キーワードを使用した try キャストの間で変換します。

タイミング: 特定のシナリオ (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

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

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

タイミング: スペースを節約するか、コードの明瞭さを向上させる場合。

理由: 逐語的文字列リテラルを通常の文字列リテラルに変換すると、スペースを節約できます。通常の文字列リテラルを逐語的文字列リテラルに変換すると、明瞭さを向上させることができます。

ハウツー

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

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

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

クラスをレコードに変換

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

タイミング: クラスをレコードにすばやく変更したい場合。レコードは、データと不変性を格納するために調整されています。

ハウツー

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

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 でフォーマットされた結果文字列 (またはプレースホルダー) を挿入文字列に変換します。

タイミング: 挿入文字列をすばやく使用したい場合に使用します。

理由: 挿入文字列を使用すると、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

メソッドのインライン化

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

タイミング: 単一のステートメント本体内で静的、インスタンス、および拡張メソッドの使用箇所を、元のメソッド宣言を削除するオプションとともに置き換えたい場合。

理由: このリファクタリングは、より明確な構文を提供します。

ハウツー

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

インラインメソッド宣言を削除するには、<QualifiedMethodName> をインライン化 を選択します

Inline method example

元のメソッド宣言を保持するには、<QualifiedMethodName> をインライン化して保持 を選択します

Inline and keep method example

一時変数のインライン化

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

タイミング: 一時変数の使用により、コードが理解しにくくなる場合。

理由: 一時変数を削除すると、コードが読みやすくなる場合があります。

ハウツー

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

Inline temporary variable example

式のローカル変数の導入

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

タイミング: ローカル変数にある場合、後で簡単に再利用できるコードがある場合。

理由: コードをコピーして複数回貼り付けてさまざまな場所で使用できますが、操作を 1 回実行し、結果をローカル変数に格納して、ローカル変数を全体で使用する方が適切です。

ハウツー

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

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

Introduce local for expression example

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

パラメーターの導入

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

タイミング: パラメーターにある場合、後で簡単に再利用できるコードがある場合。

理由: コードをコピーして複数回貼り付けてさまざまな場所で使用できますが、操作を 1 回実行し、結果をパラメーターに格納して、パラメーターを全体で使用する方が適切です。

ハウツー

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

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

Update call sites directly example

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

Introduce parameter into extracted method example

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

Introduce parameter into new overload example

using ステートメントの導入

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

タイミング: 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

メンバーを静的にする

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

タイミング: 非静的メンバーを静的にする場合。

理由: 静的メンバーは読みやすさを向上させます。特定のコードが分離されていることを知ることで、理解、再読、および再利用が容易になります。

ハウツー

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

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 は、匿名型で変数が初期化され、オブジェクトのプロパティが後でアクセスされる場合に使用する必要があります。詳細については、暗黙的に型指定されたローカル変数 (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