1

LINQ によって実行された反復回数を知りたいです。だから私は簡単なクエリを書いた

string xx = "The quick brown fox jumps over the lazy dog";

char search = 'f';

int j = 0;

var result = xx.Select((b, i) => 
{
    j++;
    return b.Equals(search) ? i : -1;
})
.Where(i => 
{
    j++;
    return i != -1;
});

MessageBox.Show(j.ToString());

実行された反復回数が含まれていると思っていjましたが、驚くべきことに0のままです。なぜそうなのですか? 2 つ目は、LINQ によって実行されたイテレーションの数を調べる方法です。

4

2 に答える 2

4

これは、LINQ が遅延評価されるためです。したがって、ラムダは必要な場合にのみ呼び出されます。

たとえば、最後に実行.ToList()してトリガーします。

于 2012-10-08T04:01:12.060 に答える
1

それがゼロのままであることをどのように知っていますか。行の後に印刷しましたvar result =か?これは、LINQ が遅延実行を使用するためです。つまり、あなたが と を呼び出したとしても、Select()実際Where()まだ何もしていません。ToList()またはToArray()LINQ チェーンの最後で呼び出すことにより、強制的に実行できます。

于 2012-10-08T04:01:45.433 に答える