打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 入门(14) 枚举器(enumerator)和迭代器(iterator)
userphoto

2018.08.07

关注

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);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

IEnumerable接口

  只有一个成员,GetEnumerator方法,就是实现上面那个接口的类对象。


应该使用泛型枚举接口

  因为非泛型的实现是不安全的,它们返回object的引用,需要自己转换成实际类型。如上面的代码int i = (int) ie.Current;,是不安全的。而实现泛型的Current属性,就会返回实际类型的对象。


迭代器

  • yield return语句指定了序列中返回的下一项。
  • yield break语句指定到序列中最尾端,就是像真正的return一样。

常见迭代模式


迭代器实质

状态 解释
Before 第一次迭代前
Running 搞事情
Suspended 等下一次迭代
After 贤者模式
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
什么是迭代器,创建并使用迭代器.为整数列表创建迭代器.为泛型列表创建迭代器 - さびしい....
C#2.0介绍之Iterators(迭代器)
迭代器的使用
一文说通C#中的异步迭代器
初次使用C#中的yield
数组
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服