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。为什么会这样?其次,如何找出 LINQ 完成了多少次迭代。

4

2 回答 2

4

那是因为 LINQ 是惰性求值的。因此,只有在必要时才会调用 lambda。

例如,最后执行.ToList()以触发它。

于 2012-10-08T04:01:12.060 回答
1

你怎么知道它仍然为零?var result =你是在行后打印的吗?那是因为 LINQ 使用延迟执行。因此,即使您调用Select()and Where(),他们实际上还没有任何事情。ToList()您可以通过调用或ToArray()在 LINQ 链的末尾强制它执行。

于 2012-10-08T04:01:45.433 回答