C# 入门(14) 枚举器(enumerator)和迭代器(iterator)
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)相关推荐
- 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素
目录 1.指针访问像素 2.迭代器操作像素 3.动态地址计算 OpenCV中,有三种方式访问图像像素: 指针访问:C操作符[]: 迭代器iterator 动态地址计算 上述方法在访问速度上略有差异.d ...
- C#图解教程 第十八章 枚举器和迭代器
枚举器和迭代器 枚举器和可枚举类型 第12章中,我们看到可以用foreach语句遍历数组.在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理.我们还会研究如何使用迭代器为用户自 ...
- Java心得--键值、枚举器
1. 集(Set):和数学上的"集合"概念相对应,是最简单的一种集合. Set集合中不区分元素的顺序,因此也就不记录元素的加入顺序. Set集合中不包含重复元素,即任意的两个元素e ...
- 一文详解枚举器和迭代器!
作者 | 喵叔 责编 | 胡巍巍 出品 | 程序人生(ID:coder_life) 今天来讲解一下开发人员会用但不理解的C#中的知识,这篇文章我们讲解一下枚举器与迭代器的知识. 枚举器 什么是枚举器? ...
- 基础【循环】-----(枚举器)------(转)
Iterator:枚举器 如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.这在C# 2.0中比 C# 1.1更容易实现一些.作为演 ...
- python 生成器装饰器_4.python迭代器生成器装饰器
基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元 ...
- WPF——专用枚举器ListBox和ComboBox
目录 介绍 提供了什么 本地定义的枚举器 代码 EnumItemList集合和EnumItem集合项 附加属性 使用代码 结束语 下载控件-141.8 KB 介绍 几天前,我发布了这篇文章,其中描述了 ...
- WPF——创建可观察的枚举器
目录 介绍 问题与解决方案 使用代码 兴趣点 介绍 我坐在那里试图回忆起我多年来遇到的与WPF相关的编程问题,并且想起了其中一个涉及创建可观察的枚举器值集合的问题.这很早以前就发生在我身上,我无法找到 ...
- C# IEnumerator枚举器
1.对象只要一个类型实现了IEnumerable接口就能遍历 2.IEnumerator是枚举器,一个接口类,实现MoveNext->Current->Reset 3.yield关键字是一 ...
最新文章
- vc++64位系统下long的长度为4个字节_64位系统究竟牛逼在哪里?
- What’s new: Windows Phone 7 与 Windows Phone 6.5功能对比
- 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd...
- anaconda 运行路径
- matlab wc wp,数字信号处理MATLAB习题.PDF
- typeof关键字简介
- java bigram_Java BiGramDictionary.getBiFrequency方法代碼示例
- 占位棋 python_Python开发象棋小游戏(总体思路分析)
- 权健和束昱辉传销为啥这么多?
- Cirium称,2020年航空公司准点率表现良好,但客运航班数只有2019年的一半
- Java Logging之JUL系列——Logger Hierarchy
- flink on yarn使用第三方jars的方法如何查看进程所持有jar包
- PHP - MAC下PhpStorm安装调试环境xdebug
- 正常计算机的c盘空间多大,往往C盘剩余空间多少为宜
- 小程序(倒计时的制作)
- Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正
- H5页面前端开发常见的兼容性问题解决方法
- html+css+js基础内容(六)
- python 创建空的numpy数组_真假美猴王-Numpy数据与Python数组的区别与联系
- “无人驾驶汽车系统入门”博客专栏