我想知道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完成了多少次迭代。
答案 0 :(得分:4)
那是因为LINQ是lazy evaluated。所以只有在必要时才会调用lambdas。
最后执行.ToList()
以触发它,例如。
答案 1 :(得分:1)
你怎么知道它仍为零;你在var result =
行后打印了吗?那是因为LINQ使用延迟执行。因此,即使您致电Select()
和Where()
,他们实际上还没有做任何事情。您可以通过在LINQ链末尾调用ToList()
或ToArray()
来强制执行它。