次の方法で共有


foreach ループを LINQ に変換する

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

  • C#

何: IEnumerable を使用する foreach ループを LINQ クエリまたは LINQ 呼び出し形式 (LINQ メソッドとも呼ばれます) に簡単に変換できます。

いつ: IEnumerable を使用する foreach ループがあり、そのループを LINQ クエリとして読み取る必要があります。

なぜでしょうか: foreach ループではなく LINQ 構文を使用することを好みます。 LINQ は、クエリを C# のファーストクラス言語コンストラクトにします。 LINQ を使用すると、ファイル内のコードの量を減らし、コードを読みやすくし、さまざまなデータ ソースが同様のクエリ式パターンを持つことができます。

LINQ 構文は、通常、foreach ループよりも効率が低くなります。 LINQ を使用してコードの読みやすさを向上させるときに発生する可能性のあるパフォーマンスのトレードオフに注意しておくとよいでしょう。

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

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

    IEnumerable サンプルを使用した Foreach

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

    LINQ メニューへの変換のサンプル

  3. [LINQ に変換] または [Linq に変換 (通話フォーム)] を選択します。

    LINQ クエリ結果のサンプル

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

こちらもご覧ください