C# 迭代器(iterators)

An iterator can be used to step through collections such as lists and arrays.
迭代器“逐步地”访问集合,比如说列表和数组。“逐步地”指的是迭代器每次只返回集合中的一个元素,而不是全部返回。

迭代器块是有一个或多个yield语句的代码块,以下3种类型的代码块中的任意一种都可以是迭代器块:
1. 方法主体
2. 访问器主体
3. 运算符主体
迭代器块中的代码描述了如何枚举元素。
迭代器块中有两个特殊的语句:
- yield return 指定了序列中返回的下一项
- yield break 指定了序列中再没有其他项

根据迭代器块的返回类型,可以让迭代器块返回枚举器或可枚举类型

public IEnumerator<string> IteratorMethod()
{
    迭代器块
}
或
public IEnumerable<string> IteratorMethod()
{
    迭代器块
}
迭代器的本质:

StateMachine

迭代器本质就是一个状态机~

为什么要使用迭代器:
1. 提供了一种更抽象的集合访问方式。不必知道集合是数组、列表还是其他什么,只要使用提供的迭代器就可以了。
2. 迭代器是惰性计算,需要的时候才会返回。迭代器不会一次返回所有数据,而是在调用的时候才返回。
举个例子,比方说你需要1W个数据,不使用迭代器的话,你需要预先生成1W数据放在那里等待使用,这会占用很大一部分空间;用迭代器的话不需要预先生成,只有当需要的时候再计算返回,整个生命周期一直只占用一个数据的内存。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值