我们先思考几个问题:
- 为什么在foreach中不能修改item的值?
- 要实现foreach需要满足什么条件?
- 为什么Linq to Object中要返回IEnumerable?
接下来,先开始我们的正文。
自己实现迭代器
.net中迭代器是通过IEnumerable和IEnumerator接口来实现的,今天我们也来依葫芦画瓢。
首先来看看这两个接口的定义:


并没有想象的那么复杂。其中IEnumerable只有一个返回IEnumerator的GetEnumerator方法。而IEnumerator中有两个方法加一个属性。
接下来开发画瓢,我们继承IEnumerable接口并实现:

下面使用原始的方式调用:

本文探讨了.NET中的IEnumerable接口和IEnumerator接口在实现迭代器中的作用,通过实例解释了为什么在foreach中不能修改item的值,以及如何满足实现foreach的条件。文章还介绍了yield关键字的使用,揭示了其背后的状态机原理,以及为什么Linq to Object返回IEnumerable以实现延迟加载,提高性能。最后,展示了如何高效地从IEnumerable中随机取值。
最低0.47元/天 解锁文章
1963

被折叠的 条评论
为什么被折叠?



