VS Codeのエージェントモードを拡張するには、を試してください!

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

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

サポートされるリファクタリングとクイックフィックス

await の追加

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

使用状況: 非同期メソッド内で関数を呼び出すとき。

方法

  1. 関数呼び出しのところにキャレットを置きます (おそらく赤線で下線が引かれています)。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Add await を選択します。

Add await example

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

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

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

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

方法

  1. コンストラクターにパラメーターとして追加したいクラスメンバーをハイライトします。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Generate constructor <classname>(<membertype>, <membertype>, <etc.>) を選択します。

Add constructor parameters from members example

DebuggerDisplay 属性の追加

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

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

理由: プロパティをピン留めすると、そのプロパティをオブジェクトのプロパティリストの最上位に表示することで、デバッガー内でオブジェクトをそのプロパティから素早く検査できます。

方法

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

Add DebuggerDisplay attribute example

明示的なキャストの追加

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

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

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

方法

  1. エラーのところにキャレットを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Add explicit cast を選択します。

ファイルヘッダーの追加

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

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

理由: チームが著作権のためにファイルヘッダーを含めることを要求している場合。

方法

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

不足している usings / imports の追加

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

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

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

方法

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

Add missing  / imports example

名前付き引数の追加

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

使用状況: 多くのパラメーターを持つメソッドがある場合、名前付き引数を追加してコードをより読みやすくできます。

方法

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

Add named argument example

匿名型をクラスに変換

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

使用状況: クラスで構築し続けたい匿名型がある場合。

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

方法

  1. 匿名 (var) 型にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Convert to class を選択します。

Convert anonymous type to class example

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

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

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

理由: 自動実装プロパティと完全なプロパティ間で手動で変換することもできますが、この機能は自動的に作業を行います。

方法

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

Convert to full property. を選択します。

Convert to full property example

Use auto property. を選択します。

Use auto property example

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

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

使用状況: 特定のシナリオでキャストが失敗すると予想される場合 (as)、またはキャストが失敗することはないと予想される場合 (直接キャスト)。

方法

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

Change to cast を選択します。

Change to cast example

Change to as expression. を選択します。

Change to  expression example

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

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

理由: for ループを foreach ステートメントに変換したい理由は以下の通りです

  • ループ内でローカルループ変数をアイテムへのインデックスとして以外に使用しない場合。
  • コードを簡素化し、初期化、条件、イテレーターセクションでのロジックエラーの可能性を減らしたい場合。

foreach ステートメントを for ループに変換したい理由は以下の通りです

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

方法

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

Convert to for を選択します。

Convert to  example

Convert to foreach を選択します。

Convert to

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

Get メソッドをプロパティに変換

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

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

方法

  1. Get メソッド名にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. (オプション) Set メソッドがある場合、この時点で Set メソッドも変換できます。Replace <Get method or Set method name> with property を選択します。

Replace Get method with property example

プロパティを Get メソッドに変換

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

使用状況: 値の即時設定と取得以上のことを含むプロパティがある場合

方法

  1. Get メソッド名にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Replace <property name> with method を選択します。

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. 次のオプションから選択します

Convert to switch statement を選択します。

Convert to  statement example

Convert to switch expression を選択します。

Convert to  expression example

Convert to if statement を選択します。

Convert to  statement example

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

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

使用状況: コードのスペースを節約したい場合、または明瞭性を高めたい場合。

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

方法

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

Convert to regular string を選択します。

Convert to verbatim string を選択します。

クラスをレコードに変換

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

使用状況: データ保存と不変性に特化したレコードにクラスを素早く変更したい場合。

方法

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

Convert class to record before example

Convert class to record after example

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

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

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

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

方法

  1. ローカル関数にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Convert to method を選択します。

Convert local function to method example

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

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

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

方法

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

Convert to decimal を選択します。

Convert to decimal example

Convert to hex を選択します。

Convert to hex example

Convert to binary を選択します。

Convert to binary example

プレースホルダーを補間文字列に変換

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

使用状況: 補間文字列を素早く使用したい場合。

理由: 補間文字列は String.Format よりも読みやすいバージョンを提供し、変数名に直接アクセスできます。

方法

  1. String.Format プレースホルダーにカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Convert to interpolated string を選択します。

Convert placeholder to interpolated string example

通常文字列を補間文字列に変換

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

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

方法

  1. 変換したい文字列にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Convert to interpolated string を選択します。

Convert to interpolated string before example

Convert to interpolated string after example

タプルを構造体に変換

内容: タプルを struct に変換します。

使用状況: タプルを struct に素早く変更したい場合、および複数回アクセスしたい固定データがある場合。

方法

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

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

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

    • 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 tuple to  options

Convert tuple to  example

フィールドのカプセル化

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

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

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

方法

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

Encapsulate field: <fieldname> (and use property) を選択します。

Encapsulate field and use property example

Encapsulate field: <fieldname> (but still use field) を選択します。

Encapsulate field but still use field example

比較演算子の生成

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

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

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

方法

  1. クラス内または IComparable キーワードにカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. ドロップダウンメニューから Generate comparison operators を選択します。

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

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

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

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

方法

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

Generate default constructor example

パラメーターの生成

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

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

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

方法

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

Generate parameter example

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

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

使用状況: 次の場合に使用します

  • 同じ実装を複数のインターフェースで呼び出したくない場合。
  • 2つのインターフェースがプロパティとメソッドなど、同じ名前の異なるメンバーを宣言しているケースを解決したい場合。

方法

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

Implement all members explicitly example

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

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

方法

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

Implement all members implicitly

メソッドのインライン化

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

使用状況: 単一のステートメントボディ内で静的、インスタンス、および拡張メソッドの使用箇所を、元のメソッド宣言を削除するオプション付きで置き換えたい場合。

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

方法

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

Inline <QualifiedMethodName> を選択して、インラインメソッド宣言を削除します。

Inline method example

Inline and keep <QualifiedMethodName> を選択して、元のメソッド宣言を保持します。

Inline and keep method example

一時変数のインライン化

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

使用状況: 一時変数の使用によりコードが理解しにくくなっている場合。

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

方法

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

Inline temporary variable example

式のローカル変数を導入

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

使用状況: ローカル変数に入っていれば後で簡単に再利用できるコードがある場合。

理由: コードを複数回コピー&ペーストして様々な場所で使用することもできますが、操作を一度実行し、結果をローカル変数に格納し、そのローカル変数を全体的に使用する方が良いでしょう。

方法

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

Introduce local -> Introduce local for <expression> を選択します。

Introduce local for expression example

Introduce local -> Introduce local for all occurrences of <expression> を選択します。

パラメーターの導入

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

使用状況: パラメーターに入っていれば後で簡単に再利用できるコードがある場合。

理由: コードを複数回コピー&ペーストして様々な場所で使用することもできますが、操作を一度実行し、結果をパラメーターに格納し、そのパラメーターを全体的に使用する方が良いでしょう。

方法

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

Introduce parameter for <expression> -> and update call sites directly を選択します。

Update call sites directly example

Introduce parameter for <expression> -> into extracted method を選択します。

Introduce parameter into extracted method example

Introduce parameter for <expression> -> into new overload を選択します。

Introduce parameter into new overload example

using ステートメントの導入

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

使用状況: 適切に取得、使用、破棄されることを保証したい IDisposable インスタンスがある場合。

方法

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

Introduce  statement example

条件式と論理演算の反転

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

使用状況: 反転するとより理解しやすい条件式または条件 and \ or 演算子がある場合。

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

方法

  1. 条件式または条件 and \ or 演算子にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Invert conditional または Replace && with || を選択します。

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. Invert if を選択します。

Invert  example

メンバーを静的にする

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

使用状況: 非静的メンバーを静的にしたい場合。

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

方法

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

Make member static example

宣言を参照の近くに移動

内容: 変数宣言を使用箇所に近づけることができます。

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

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

方法

  1. 変数宣言にカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Move declaration near reference を選択します。

Move declaration near reference example

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

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

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

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

方法

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

Move type to matching file example

for ステートメントの反転

内容: for ステートメントを反転できます。

使用状況: for ステートメントの意味と反復方法を反転したい場合。

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

方法

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

Reverse  statements example

if ステートメントの分割または結合

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

使用状況: && または || 演算子を使用する if ステートメントをネストされた if ステートメントに分割したい場合、または if ステートメントを外側の if ステートメントと結合したい場合。

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

方法

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

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

Split into nested  statements example

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

  1. 内側の if キーワードにカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Merge with nested if statement を選択します。

Merge with nested  statements example

明示的な型を使用

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

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

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

方法

  1. var キーワードにキャレットを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Use explicit type instead of var を選択します。

Use explicit type instead of  example

暗黙的な型を使用

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

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

方法

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

Use implicit type example

ラムダ式またはブロックボディを使用

内容: ラムダ式を式ボディまたはブロックボディを使用するようにリファクタリングできます。

使用状況: ラムダ式が式ボディまたはブロックボディのいずれかを使用する方が好ましい場合。

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

方法

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

Use block body for lambda expressions を選択します。

Use block body for lambda expressions example

Use expression body for lambda expressions を選択します。

Use expression body for lambda expressions

再帰パターンを使用

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

使用状況: 再帰パターンを使用すると、コードがより読みやすく/きれいにすることができます。

方法

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

Convert switch statement to expression を選択します。

Convert  statement to expression example

Use recursive patterns を選択します。

Use recursive patterns before example

Use recursive patterns after example

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

コールチェーンの折り返しと配置

内容: メソッド呼び出しのチェーンを折り返して配置できます。

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

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

方法

  1. コールチェーンのいずれかにカーソルを置きます。
  2. ⌘. (Windows、Linux Ctrl+.)を押して、クイックアクションとリファクタリング メニューをトリガーします。
  3. Wrap call chain または Wrap and align call chain を選択してリファクタリングを適用します。

Wrap and align call chain example

パラメーターまたは引数の折り返し、インデント、および配置

内容: パラメーターまたは引数を折り返し、インデントし、配置できます。

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

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

方法

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

Wrap every parameter -> Align wrapped parameters を選択します。

Align wrapped parameters example

Wrap every parameter -> Indent all parameters を選択します。

Indent all parameters example

Wrap every parameter -> Indent wrapped parameters を選択します。

Indent wrapped parameters example

二項式の折り返し

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

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

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

方法

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

Wrap expression example