c# - Linq 延迟操作

标签 c# .net linq

我基本上理解延迟执行,但我有一个关于特定情况的问题:

给定一个代码片段,例如

                        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/

相关文章:

c# - 为什么在将 First() 应用于投影时此 linq 代码会呈指数级变慢?

c# - 用动态数字替换文本中的单词/值

c# - 为什么 Contains 比较对象与 == 不同?

c# - Fluent NHibernate 生成的列名别名太长

c# - 你什么时候会实现自己的排序算法?

c# - 关于反射和权限的快速问题。 .net 2008

asp.net - Entity Framework - 映射不映射存储过程?

c# - 在单个查询中从多个表中选择记录计数

c# - 使用 C# 将 MP4 转换为 Ogg

c# - 是否可以将参数(绑定(bind))传递给 WPF 样式