Visual Studioには、ループと LINQ 式の間で変換するためのリファクタリングがいくつか用意されています。 これらのリファクタリングには、[クイック アクションとリファクタリング] メニュー (Ctrl+.
for ループを foreach ステートメントに変換する
Applies to: C#, Visual Basic
このリファクタリングにより、for ループが foreach ステートメントに変換されます。 これは、ループ変数をインデックスとして必要とせず、コードを簡略化したい場合に便利です。
注
Foreach クイック アクションへの変換リファクタリングは、初期化子、条件、反復子の 3 つの部分をすべて含むループでのみ使用できます。
キャレットを
forキーワードに配置します。Ctrl キー+押すか、コード ファイルの余白にある
をクリックします。
[ 変換] を [foreach] に選択します。 または、[ 変更のプレビュー ] を選択して [ 変更のプレビュー ] ダイアログを開き、[ 適用] を選択します。
foreach ステートメントを for ループに変換する
Applies to: C#, Visual Basic
このリファクタリングにより、 foreach ステートメントが for ループに変換されます。 これは、項目にアクセスするだけでなくループ変数を使用する必要がある場合や、多次元配列を反復処理する場合に便利です。
キャレットを
foreachまたはFor Eachキーワードに配置します。Ctrl キー+押すか、コード ファイルの余白にある
をクリックします。
[ 変換] を [対象] に選択します。 または、[ 変更のプレビュー ] を選択して [ 変更のプレビュー ] ダイアログを開き、[ 適用] を選択します。
リファクタリングでは新しい反復回数変数が導入されるため、エディターの右上隅に [名前の変更 ] ボックスが表示されます。 変数に別の名前を選択する場合は、変数を入力して Enter キーを押すか、[名前の変更] ボックスで [適用] を選択します。 新しい名前を選択しない場合は、 Esc キーを押すか、[ 適用 ] を選択して [名前の変更 ] ボックスを閉じます。
注
C# の場合、これらのリファクタリングによって生成されるコードは、コレクション内の項目の型に明示的な型または var を使用します。 生成されるコードの型 (明示的または暗黙的) は、スコープ内のコード スタイルの設定によって異なります。 これらの特定のコード スタイル設定は、コンピューター レベルの Tools>Options>Text Editor>C#>Code Style>General>'var' の基本設定、または EditorConfig ファイルのソリューション レベルで構成されます。 [オプション] でコード スタイルの設定を変更した場合は、変更を有効にするためにコード ファイルをもう一度開きます。
foreach ループを LINQ に変換する
適用対象: C#
このリファクタリングでは、IEnumerable を使用する foreach ループを LINQ クエリまたは LINQ 呼び出しフォーム (LINQ メソッドとも呼ばれます) に変換します。
注
LINQ 構文は通常、foreach ループよりも効率が低くなります。 LINQ を使用してコードの読みやすさを向上させる場合に発生する可能性があるパフォーマンスのトレードオフに注意することをお勧めします。
foreachキーワードにカーソルを置きます。
Ctrl+. キーを押して、[クイック アクションとリファクタリング] メニューをトリガーします。
[ CONVERT to LINQ]\(LINQ に変換\ ) または [Convert to Linq (呼び出しフォーム)]を選択します。
サンプル コード
using System.Collections.Generic;
public class Class1
{
public void MyMethod()
{
var greetings = new List<string>()
{ "hi", "yo", "hello", "howdy" };
IEnumerable<string> enumerable()
{
foreach (var greet in greetings)
{
if (greet.Length < 3)
{
yield return greet;
}
}
yield break;
}
}
}
LINQ を foreach ステートメントに変換する
Applies to: C#, Visual Basic
このリファクタリングにより、 LINQ クエリ構文 が foreach ステートメントに変換されます。
from以降の LINQ クエリ全体を選択します。注
このリファクタリングは、メソッド構文ではなくクエリ構文で表される LINQ クエリの変換にのみ使用できます。
Ctrl キー+押すか、コード ファイルの余白にある
をクリックします。
[ 変換] を [foreach] に選択します。 または、[ 変更のプレビュー ] を選択して [ 変更のプレビュー ] ダイアログを開き、[ 適用] を選択します。
注
C# の場合、これらのリファクタリングによって生成されるコードでは、foreach ループの反復変数に明示的な型または var が使用されます。 生成されるコードの型 (明示的または暗黙的) は、スコープ内のコード スタイルの設定によって異なります。 これらの特定のコード スタイル設定は、コンピューター レベルの Tools>Options>Text Editor>C#>Code Style>General>'var' の基本設定、または EditorConfig ファイルのソリューション レベルで構成されます。
[オプション] でコード スタイルの設定を変更した場合は、変更を有効にするためにコード ファイルをもう一度開きます。
LINQ 式を簡略化する
適用対象: C#
このリファクタリングにより、Enumerable.Single()のSomeEnumerable.Single(<LambdaExpression>)SomeEnumerableType.Where(<LambdaExpression>).Single()のインスタンスと、SingleOrDefault()、Last()、LastOrDefault()、Any()、Count()、First()、FirstOrDefault()の列挙可能なメソッドが簡略化されます。
.Where() メソッドの Enumerable の不要な呼び出しを削除すると、読みやすさが向上し、場合によってはパフォーマンスが向上します。
Visual Studioの
SomeEnumerableType.Where(<LambdaExpression>).Single()インスタンス内にカーソルを置く。Ctrl+. キーを押して、[クイック アクションとリファクタリング] メニューをトリガーします。
[ LINQ 式の簡略化] を選択します。