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# 入门(14) 枚举器(enumerator)和迭代器(iterator)相关推荐

  1. 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素

    目录 1.指针访问像素 2.迭代器操作像素 3.动态地址计算 OpenCV中,有三种方式访问图像像素: 指针访问:C操作符[]: 迭代器iterator 动态地址计算 上述方法在访问速度上略有差异.d ...

  2. C#图解教程 第十八章 枚举器和迭代器

    枚举器和迭代器 枚举器和可枚举类型 第12章中,我们看到可以用foreach语句遍历数组.在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理.我们还会研究如何使用迭代器为用户自 ...

  3. Java心得--键值、枚举器

    1. 集(Set):和数学上的"集合"概念相对应,是最简单的一种集合. Set集合中不区分元素的顺序,因此也就不记录元素的加入顺序. Set集合中不包含重复元素,即任意的两个元素e ...

  4. 一文详解枚举器和迭代器!

    作者 | 喵叔 责编 | 胡巍巍 出品 | 程序人生(ID:coder_life) 今天来讲解一下开发人员会用但不理解的C#中的知识,这篇文章我们讲解一下枚举器与迭代器的知识. 枚举器 什么是枚举器? ...

  5. 基础【循环】-----(枚举器)------(转)

    Iterator:枚举器 如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.这在C# 2.0中比 C# 1.1更容易实现一些.作为演 ...

  6. python 生成器装饰器_4.python迭代器生成器装饰器

    基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元 ...

  7. WPF——专用枚举器ListBox和ComboBox

    目录 介绍 提供了什么 本地定义的枚举器 代码 EnumItemList集合和EnumItem集合项 附加属性 使用代码 结束语 下载控件-141.8 KB 介绍 几天前,我发布了这篇文章,其中描述了 ...

  8. WPF——创建可观察的枚举器

    目录 介绍 问题与解决方案 使用代码 兴趣点 介绍 我坐在那里试图回忆起我多年来遇到的与WPF相关的编程问题,并且想起了其中一个涉及创建可观察的枚举器值集合的问题.这很早以前就发生在我身上,我无法找到 ...

  9. C# IEnumerator枚举器

    1.对象只要一个类型实现了IEnumerable接口就能遍历 2.IEnumerator是枚举器,一个接口类,实现MoveNext->Current->Reset 3.yield关键字是一 ...

最新文章

  1. vc++64位系统下long的长度为4个字节_64位系统究竟牛逼在哪里?
  2. What’s new: Windows Phone 7 与 Windows Phone 6.5功能对比
  3. 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd...
  4. anaconda 运行路径
  5. matlab wc wp,数字信号处理MATLAB习题.PDF
  6. typeof关键字简介
  7. java bigram_Java BiGramDictionary.getBiFrequency方法代碼示例
  8. 占位棋 python_Python开发象棋小游戏(总体思路分析)
  9. 权健和束昱辉传销为啥这么多?
  10. Cirium称,2020年航空公司准点率表现良好,但客运航班数只有2019年的一半
  11. Java Logging之JUL系列——Logger Hierarchy
  12. flink on yarn使用第三方jars的方法如何查看进程所持有jar包
  13. PHP - MAC下PhpStorm安装调试环境xdebug
  14. 正常计算机的c盘空间多大,往往C盘剩余空间多少为宜
  15. 小程序(倒计时的制作)
  16. Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正
  17. H5页面前端开发常见的兼容性问题解决方法
  18. html+css+js基础内容(六)
  19. python 创建空的numpy数组_真假美猴王-Numpy数据与Python数组的区别与联系
  20. “无人驾驶汽车系统入门”博客专栏

热门文章

  1. 全球钻石行业发展现状分析,钻石市场有望在2021年回暖「图」
  2. Pandora 的魔盒里装了什么?
  3. 快手高性能移动端多媒体引擎架构
  4. Android 实现压缩图片到任意尺寸
  5. QT在线安装过程中,无法下载存档,解决方法
  6. IO端口和IO接口的区别
  7. 类中的向上转型与向下转型详解
  8. Python求文件行数
  9. 『与善仁』Appium基础 — 14、APPium安装(包含Node.js安装)
  10. 【vulhub靶场】GoldenEye