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数据放在那里等待使用,这会占用很大一部分空间;用迭代器的话不需要预先生成,只有当需要的时候再计算返回,整个生命周期一直只占用一个数据的内存。

猜你喜欢

转载自blog.csdn.net/guojunxiu/article/details/81505815
今日推荐