に参加して、VS Code の AI 支援開発について学びましょう。

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. 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 / インポートの追加

内容: コピーアンドペーストされたコードに必要なインポートまたは 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 メソッドも変換できます。 をプロパティに置換を選択します。

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

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

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

メンバーを静的にする

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

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

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

手順

  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

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