0

次のような例を考えてみます。

x = SomeFunctionReturningIEnumerable().ToArray();


if (!x.Any())
{
    //... (some code here that doesn't enumerate x)
    //...
    foreach (var item in x)
    {
        //...
    }
}

どのような状況でToArray()呼び出しが良いアイデアで、どのような状況で悪いアイデアですか? そして、どのような状況では、それはまったく問題ではありません。

4

1 に答える 1

0

列挙が特に高価で、シーケンス全体をバッファリングしたくない場合は、Ix-Mainを使用しますMemoize()。これは 2 回の反復でバッファリングされます。

x = SomeFunctionReturningIEnumerable().Memoize(2);

if (!x.Any())
{
    //... (some code here that doesn't enumerate x)
    //...
    foreach (var item in x)
    {
        //...
    }
}

Any() はその Enumerator をすぐに破棄するため、最初の値のみがバッファリングされます。一度foreach渡されると、ソースから再びストリーミングされます。

于 2013-10-24T03:51:39.323 に答える