foreach ループを LINQ に変換する

適用対象:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

このリファクタリングは以下に適用されます。

  • C#

概要: IEnumerables を使用する foreach ループを LINQ クエリまたは LINQ 呼び出し形式 (別名 LINQ メソッド) に簡単に変換できます。

条件: IEnumerable を使用する foreach ループがあり、そのループで LINQ クエリとして読み取る。

理由: foreach ループよりも LINQ 構文を使用したい。 LINQ により、クエリは C# での高度な言語構成要素になります。 LINQ では、ファイルのコードの量が減り、コードが読みやすくなります。また、さまざまなデータ ソースで同様のクエリ式パターンを指定できます。

Note

一般的に、LINQ 構文は foreach ループに比べて効率的ではありません。 LINQ を使用してコードの読みやすさを改善するときは、発生する可能性があるパフォーマンスのトレードオフを認識しておくことをお勧めします。

foreach ループを LINQ リファクタリングに変換する

  1. foreach キーワードにカーソルを置きます。

    Foreach using IEnumerable sample

  2. Ctrl+. キーを押して、[クイック アクションとリファクタリング] メニューをトリガーします。

    Convert to LINQ menu sample

  3. [Convert to LINQ](LINQ に変換) または [Convert to LINQ (call form)](LINQ に変換 (呼び出し形式)) を選択する

    LINQ query result sample

    LINQ call form result sample

サンプル コード

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;
        }
    }
}

関連項目