龙空技术网

从零开始自学C#基础的第三十七天——迭代器

白神妖泽 147

前言:

如今看官们对“迭代器是什么类型”都比较关心,你们都需要学习一些“迭代器是什么类型”的相关内容。那么小编在网摘上网罗了一些对于“迭代器是什么类型””的相关资讯,希望小伙伴们能喜欢,你们一起来了解一下吧!

一,开始学习

迭代器:

迭代器是方法,get访问器或运算符,他能够在类或结构中支持foreach迭代,而不必实现整个IEnumerable接口,只须提供一个迭代器,即遍历类中的数据结构,当编译器检测到迭代器时,他将自动生成IEnumerable或IEnumerable接口的Current,MoveNext和Dispose方法。

特点:

迭代器是可以返回相同类型的值的有序序列的一段代码;迭代器可用做方法,运算符或get访问器的代码体;迭代器代码使用yield return语句依次返回每个元素;yield break将终止迭代。可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在foreaach语句中被客户端代码调用,迭代器的返回类型必须为IEnumerable,IEnumerator,IEnumerable或IEnumerator.yield关键字用于指定返回值,到达yield return语句时,会保存当前位置,下次调用迭代器时将从此位置重新开始执行。GetEnumerator方法的存在使得类型成为可枚举的类型,并允许使用foreach语句遍历类中的成员。

迭代器的实现:

可以使用循环来遍历结构类型的数据,例如数组和集合对象;只要实现了GetEnumerator方法并返回Ienumerator接口,就可以实现任何数据集合的遍历;有多种方法可以实现迭代器,首先要创造一个“可枚举的类”,这个类实现IEnumerable接口,可以循环遍历数据集合;也可以更加明确的声明循环遍历的过程;要实现迭代,必须实现Ienumerable接口,或者实现泛型接口IEnumerable<T>;当添加一个迭代器的时候,就可以返回字符串序列,可以用数组来存储数据;实现IEnumerable<T>接口后,还要提供一个GetEnumerator方法,该方法用来遍历类中的每个元素;

使用yield关键字可以实现迭代器的具体操作,但在GetEnumerator方法中,会返回每个数据项,通常情况下yield返回语句出现在循环体中。

当执行yield返回语句的时候,就会返回相应的值并把状态保存在迭代器中,当下次请求数据的时候,代码会从这个状态继续执行,并继续返回数据。

当执行循环语句的时候,将执行迭代方法中的第一次迭代,在返回第一个结果之前初始化循环语句。当第二次迭代的时候,会重新初始化循环语句,迭代器知道如何继续下次循环。

代码实现了迭代器方法,循环输出字符数组中的每个字符,当使用foreach循环的时候,迭代器会自动返回每个字符,并记住当前状态。当执行下一次循环的时候,迭代器会从上次循环的位置继续下次输出(yield),返回下一个字符。

代码里没有直接返回数组中的值,而是通过类型转换,根据变量i的值自动生成一个字母,并返回给调用程序。

LinkedList集合的每个元素都是LinkedListNode.LinkedListNode包含一个值,对其所属的LinkedList的引用,对下一个节点的引用,以及对上一个节点的引用。

List表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索,排序和操作的方法。

二,小结

1,迭代器是方法,get访问器或运算符,他能够在类或结构中支持foreach迭代,而不必实现整个IEnumerable接口,只须提供一个迭代器,即遍历类中的数据结构,当编译器检测到迭代器时,他将自动生成IEnumerable或IEnumerable接口的Current,MoveNext和Dispose方法。

2,特点:迭代器是可以返回相同类型的值的有序序列的一段代码;迭代器可用做方法,运算符或get访问器的代码体;迭代器代码使用yield return语句依次返回每个元素;yield break将终止迭代。

标签: #迭代器是什么类型