实现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贤者模式
___________ .__ _________ \__ ___/_ _ __ ____ | |___ __ ____ / _____/ ____ ____ | | \ \/ \/ // __ \| |\ \/ // __ \ \_____ \_/ __ \_/ ___\ | | \ /\ ___/| |_\ /\ ___/ / \ ___/\ \___ |____| \/\_/ \___ >____/\_/ \___ >______ :bookmark_tabs: Golang Enumerators :bookmark_tabs: Enum是一个软件包,为Go提供简单的枚举,并具有IDE自动补全功能和任何类型的支持。它可能不是最漂亮的语法,但它是如此有用。 go get github.com/neoxelox/enum Create Enum package main import ( "fmt" "github.com/neoxelox/enum" type State string type enumStates = struct { COMMITTED State // You can use any type you want, for example an int. IN_PROGRESS State DONE State enum. Enum var States = enum . N 一个快速的HTTP枚举,使您可以执行大量HTTP请求,过滤响应并实时显示它们。 对filenames.txt每个条目运行一个HTTP GET请求,隐藏状态码为403或404所有响应: 我们的博客文章也介绍了季风的常见用法。 从源头建造 这些说明将为您提供master分支中代码的编译版本。 您需要的最新版本,至少是1.14版。 对于Debian,安装软件包golang-go 。 克隆存储库,然后从检出中运行以下命令: $ go build 之后,您将在当前目录中找到一个monsoon二进制文件。 它可以用于其他操作系统,如下所示: $ GOOS=windows GOA
1、对象只要一个类型实现了IEnumerable接口就能遍历 2、IEnumerator枚举,一个接口类,实现MoveNext->Current->Reset 3、yield关键字是一个迭代器,相当于实现了IEnumerator枚举 4、IEnumerable是可枚举类型,IEnumerator枚举 public class IEnumerableShow { public void Show() { int[] array = { 1, 2,
一、字典中的(有两个方法): - (NSEnumerator *)keyEnumerator;//获取所有key值 - (NSEnumerator *)objectEnumerator;//获取所有value值 NSDictionary *myDic=[[NSDictionary alloc]initWithObjectsAndKeys:@"张三",
https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 1.迭代器方法 可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。 迭代器用法法介绍。 迭代器用于依次返回每个元素,一般用于foreach循环语句。迭代器方法需要使用yield return语句。 yield return 语句介绍 保持代码的当前
一、IEnumerable接口         IEnumerable接口可以暴露一个Celltions的元素的迭代器,它只含有一个方法GetEnumerator,这个方法返回一个IEnumerator对象,而通过这个IEnumerator对象,我们就可以遍历整个Celltions中的元素。 二、代码示例         下面的代码,演示如何继承IEnumerable接口和IEnumerat
枚举Enumeration)和迭代器Iterator)是Java中两种不同的遍历集合元素的方式。 枚举是Java早期版本中遍历集合元素的方式,它只能用于遍历Vector和Hashtable等集合类。枚举Enumerator)是Enumeration的子接口,它也只能用于遍历Vector和Hashtable等集合类。枚举的方法比Enumeration多了一个remove()方法,可以在遍历时删除集合中的元素。 迭代器是Java 1.2版本引入的新特性,它是一个更通用的遍历集合元素的方式,可以用于遍历所有实现了Iterable接口的集合类。迭代器的方法比枚举多了一个hasNext()方法,可以判断是否还有下一个元素,也多了一个remove()方法,可以在遍历时删除集合中的元素。此外,迭代器还支持foreach循环语句,可以更方便地遍历集合元素。 总的来说,迭代器枚举更灵活、更通用,是Java中推荐使用的遍历集合元素的方式。