【发布时间】:2014-09-02 16:08:39
【问题描述】:
我正在探索IEnumerable<T> 界面的更深入的功能。
基本上,它作为执行的中间步骤。例如,如果你写:
IEnumerable<int> temp = new int[]{1,2,3}.Select(x => 2*x);
Select 函数的结果将不会被计算(枚举),直到使用 temp 完成某些操作以允许它(例如 List<int> list = temp.ToList())。
然而,令我困惑的是,由于IEnumerable<T> 是一个接口,根据定义,它不能被实例化。那么,实际项目(在示例中为 2*x 项目)所在的集合是什么?
此外,如果我们写成 IEnumerable<int> temp = Enumerable.Repeat(1, 10);,那么存储 1 的底层集合是什么(数组、列表、其他)?
我似乎找不到关于这个接口的实际实现及其功能的彻底(更深入)的解释(例如,如果有一个底层集合,yield 关键字是如何工作的)。
基本上,我要求的是对IEnumerable<T> 的功能进行更详细的解释。
【问题讨论】:
-
一些隐藏的框架类,它暴露了 IEnumerable 接口。这真的很重要吗?
-
底层代码/对象返回实现 IEnumerable
-
存储 1 的底层集合是什么(数组、列表、其他)? 它们不存储在任何地方。这就是延迟加载的重点
-
@YoryeNathan,我想知道,为了知道。我已经使用它多年,但从未真正深入。我认为这是一些运行时构造的东西,我只是不知道它的细节。
标签: c# linq oop interface ienumerable