役に立ちましたか?

解決

理由をもう少し詳しく説明します:

LINQは本来機能的です。データを照会し、結果を返すために使用されます。 LINQクエリは、アプリケーションの状態を変更するものであってはなりません(キャッシングなどの例外はあります)。 foreachは結果を返さないため、渡すもの以外の状態を変更することを伴わない多くの用途はありません。また、Foreach()拡張メソッドが必要な場合は、 独自のメソッドを簡単に作成できます。

一方で、入力を取得し、結果を返す各アイテムで関数を呼び出す場合、LINQはselectメソッドを介して方法を提供します。

たとえば、次のコードはリスト内のすべてのアイテムで関数デリゲートを呼び出し、そのアイテムが正の場合にtrueを返します。

    static void Main(string[] args)
    {
        IEnumerable<int> list = new List<int>() { -5, 3, -2, 1, 2, -7 };
        IEnumerable<bool> isPositiveList = list.Select<int, bool>(i => i > 0);

        foreach (bool isPositive in isPositiveList)
        {
            Console.WriteLine(isPositive);
        }

        Console.ReadKey();        
    }

他のヒント

List<T>のForEachメソッドがこれを行います。コレクションをリストにラップしてからその呼び出しを使用することもできますが、それは本当に良いことではありません。独自にロールする必要があるようです。

すでに議論されているこちらおよびそこ

>

覚えるのは眠すぎますが、基本的に、シングルスレッドアプリケーションの.ForEachメソッドは、既存のforeachステートメントと機能的に同等です。私が理解していることから、主な違いは、ForEachを並列化することができますが、不要な動作が簡単に導入されることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top