我基本上理解延迟执行,但我有一个关于特定情况的问题:
给定一个代码片段,例如
var resultsOfInterest = from r in ...
select r;
foreach (var x in resultsOfInterest)
{
//do something with x
}
查询 resultsOfInterest 执行了多少次?在设置 foreach 循环时一次,还是为每个元素“x”一次?用
会更有效率吗 foreach (var x in resultsOfInterest.ToArray())
{
//do something with x
}
?
TIA
最佳答案
它将执行一次,就在循环之前,当 GetEnumerator()
方法将在查询变量上执行时。以下是 foreach 循环的样子:
var enumerator = resultsOfInterest.GetEnumerator(); // query executed here
while(enumerator.MoveNext()) // iterating over results of query execution
{
var x = enumerator.Current;
// do something with x
}
第二个示例不会更高效,它只是将查询执行的结果存储在数组中,然后调用数组迭代器:
var enumerator = resultsOfInterest.ToArray().GetEnumerator();
// loop stays same
关于c# - Linq 延迟操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616361/