读书人

linq的推迟执行-学习linq的资料和笔记

发布时间: 2012-12-28 10:29:04 作者: rapoo

linq的延迟执行--学习linq的资料和笔记(四)

延迟执行的实现 是因为使用了IEnumerable<T>的这种枚举进行迭代!

如:方法


调试可以看到 在调用时 方法并没有执行,而是在遍历的时候,每遍历一个元素,方法内才返回一个元素!也就是延迟执行。

这就是迭代器的作用(在这里我就不写迭代器相关的知识了,有时间我会单独发博客)

因为linq方法的返回值类型大部分使用了IEnumerable<T>或者实现了IEnumerable<T>,所以linq中的大部分方法 是具有延迟执行的功能的!


以下内容 摘自博客园(学习资料)

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行。这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时)。让我们考虑下面这个query:

linq的推迟执行-学习linq的资料和笔记(四)
         static void TestDeferredExecution()
{
var numbers = new List<int>();
numbers.Add(1);
IEnumerable<int> query = numbers.Select(n => n * 10); // Build query

numbers.Add(2); // Add an extra element after the query
foreach (int n in query)
Console.Write(n + "|"); // 10|20|
}
linq的推迟执行-学习linq的资料和笔记(四)

可以看出,我们在查询创建之后添加的number也包含在查询结果中了,这是因为直到foreach语句对query进行遍历时,LINQ查询才会执行,这时,数据源numbers已经包含了我们后来添加的元素2,LINQ的这种特性就是延迟执行。除了下面两种查询运算符,所有其他的运算符都是延迟执行的:

读书人网 >.NET

热点推荐