C#的枚举器和迭代器
参考书籍: 《C#图解教程》
枚举器一般用来foreach的,而迭代器在Unity中常用来当协程(Coroutine)用。
枚举器
IEnumerator接口
实现IEnumerator接口的类就可以foreach了,当然前提是实现对。这个接口有三个函数成员。
- Current
- 只读。
- 返回object类型的引用。
- 第一次的位置在-1,所以算是溢出了。
- MoveNext
- 把枚举器位置指向下一项。
- 返回bool。判断是否新的位置有效。
- 第一次用要在Current前。
- Reset
- 把位置重置到原始状态。
foreach做的事跟下面这段代码差不多。
static void Main()
{
int[] MyArray = {10,11,12,13};
IEnumerator ie = MyArray.GetEnumerator(); //获取枚举器
while(ie.MoveNext()) //移到下一项
{
int i =(int) ie.Current; //获取当前项
Console.WriteLine("{0}",i);
}
}
IEnumerable接口
只有一个成员,GetEnumerator方法,就是实现上面那个接口的类对象。
应该使用泛型枚举接口
因为非泛型的实现是不安全的,它们返回object的引用,需要自己转换成实际类型。如上面的代码int i = (int) ie.Current;,是不安全的。而实现泛型的Current属性,就会返回实际类型的对象。
迭代器
- yield return语句指定了序列中返回的下一项。
- yield break语句指定到序列中最尾端,就是像真正的return一样。
常见迭代模式

迭代器实质

| 状态 | 解释 |
|---|---|
| Before | 第一次迭代前 |
| Running | 搞事情 |
| Suspended | 等下一次迭代 |
| After | 贤者模式 |

本文详细介绍了C#中的枚举器与迭代器的概念及应用。枚举器通过实现IEnumerator接口来支持foreach遍历操作,而迭代器则通过yield return语句简化了循环逻辑。文章还讨论了枚举器的状态及其在Unity中的应用。
3735

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



