3

.NET 3.5では、List<>はForEachメソッドを取得します。これがIList<>またはIEnumerable<>に存在しないことに気付きました。ここでの考え方は何でしたか?これを行う別の方法はありますか?これを行うための素晴らしくて簡単な短い方法?

講演者が常により一般的なインターフェースを使用すると言った話をしていたので、私は尋ねます。しかし、向きを変えてForEachを使用できるようにしたいのに、なぜIList <>をリターンタイプとして使用するのでしょうか?次に、それをList<>にキャストして戻すことになります。

4

3 に答える 3

4

ここでの考えは何でしたか?

この機能が追加されなかった理由については、EricLippertブログを読むことができます。

これを行う別の方法はありますか?これを行うための素晴らしくて簡単な短い方法?

foreachキーワードを使用しないのはなぜですか?私はそれがより読みやすいと思います。

foreach (var foo in ilist)
{
    // etc...
}

ただし、必要に応じてForEach拡張メソッドを追加できます。IEnumerable<T>

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach (T item in enumeration)
    {
        action(item);
    }
}

ここから撮影。

于 2010-06-02T21:48:18.137 に答える
1

これは(まだ)フレームワークにはありませんが、Rxは、ListのカスタムForEachと同じことを行う.Run(this IEnumerable enumerable)拡張メソッドを追加します。これが標準フレームワークの一部になるまでは、独自に作成するか、追加の依存関係を使用する必要があります。

于 2010-06-02T21:50:16.330 に答える
1

なぜ入ってForEachいないのIEnumerable<T>ですか?Eric Lippertは、彼のブログでこれをうまく説明しています。基本的に、LINQは機能的(副作用なし)であることが意図されており、ForEach明らかに非機能的です。

しかし、なぜそれがないのIList<T>ですか?まあ...そうあるべきです!

于 2010-06-02T22:05:07.963 に答える