![]() |
1
3
它本身并不保存在内存中,因此以下内容有时是值得优化的:
是否需要ToList()取决于DoStuff()的作用、源列表与筛选列表的大小、枚举的开销等。
注意,当
|
![]() |
2
1
澄清: 在你的队伍里:
表达式不求值,因此迭代实际上不会发生。这就是所谓的“延期评估”。注意:这在概念上独立于接口实现,因此不管它是列表或[]等(当然可以针对这个主要概念进行实现,但这超出了问题的范围)
当您开始迭代
尽管我们没有看到你
回答 您所要求的ar主要独立于上面描述的延迟评估:它是关于缓存的。如果不缓存结果,则会多次发生迭代。计算(迭代)和缓存的最简单模式是执行ToList()
(请注意,并非所有IEnumerable实现都允许多个iterasion,但List<>允许。 |
![]() |
3
0
他怎么能记住它?不可能。必须执行。 延迟并不意味着缓存。意思是这条线
不能执行任何操作。别开玩笑了-可能会延期。 然后排队 剂量1(偶数); 它可能会执行。 当项不是内存中的列表,而是一个数据库,可能是一个cmplex查询时,人们会过来说“哦,我的foreach在得到第一行之前花了1分钟”——这就是defered的意思。在这种情况下,它将只发送SQL并在请求第一个项时执行它。 |