【发布时间】:2021-10-15 07:57:47
【问题描述】:
我最近一直在阅读有关延迟执行、LINQ、一般查询等的文章和文档,并且经常出现“枚举对象”这一短语。有人可以解释枚举对象时会发生什么吗?
例如article。
这个方法是通过延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。此方法表示的查询不会执行直到枚举对象直接调用其 GetEnumerator 方法或使用 Visual C# 中的 foreach
【问题讨论】:
-
它在接下来的几句话中告诉你:直接调用它的
GetEnumerator方法或使用foreach。 -
它还告诉你在它
enumerated之后将是iterable。 -
假设对象是一个通用项目列表
List<TItem>。它已经实现了IEnumerable<T>接口。为什么我们的查询需要枚举?当我们枚举它时,这个列表到底发生了什么变化? -
枚举时列表中没有任何变化。枚举是访问列表的一种方式。索引到列表中将是另一种方式。有些集合甚至没有索引器,只能被认为是项的序列,这就是 IEnumerable 所代表的。枚举的意思是“我现在要将这个集合作为一个项目序列来访问,因为它符合我当前的目标”。
-
FYI 这是
foreach在List编译后所做的事情。
标签: c# .net linq ienumerable deferred-execution