Linq延迟求值现象
.NET中的迭代器非常个性,它不是一次性的返回集合中的所有值,而是每次只返回一个,接着再返回下一个,一个接一个直到迭代结束。Linq中的查询语句依赖于延迟求值,它也并不是一次返回整个查询结果,而是和迭代一样一个一个的返回。下面的代码是查询一个数组并依次对数组中的每一个元素进行操作。
执行结果如图
从结果可以看出,查询并不是一次性的执行完毕,而是每传入一个值执行一次。反编译以上代码生成的EXE文件,整理后,类似于以下代码
上面的代码都是每请求一次,执行一次代码。假如想在请求之前就让查询对数组中的每个值都调用过一次Calculate方法。那么就需要调用ToList方法依次访问查询中的结构,并返回一个List<int>对象。修改foreach中的代码,如下
执行结果如下