先说IEnumerable,我们每天用的foreach你真的懂它吗?

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先思考几个问题:

  1. 为什么在foreach中不能修改item的值?
  2. 要实现foreach需要满足什么条件?
  3. 为什么Linq to Object中要返回IEnumerable?

接下来,先开始我们的正文。

自己实现迭代器

.net中迭代器是通过IEnumerable和IEnumerator接口来实现的,今天我们也来依葫芦画瓢。

首先来看看这两个接口的定义:

并没有想象的那么复杂。其中IEnumerable只有一个返回IEnumerator的GetEnumerator方法。而IEnumerator中有两个方法加一个属性。

接下来开发画瓢,我们继承IEnumerable接口并实现:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值