创建迭代器最常用的方法是对 IEnumerable 接口实现 GetEnumerator 方法,例如:
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < max; i++)
{
yield return i;
}
}
GetEnumerator 方法的存在使得类型成为可枚举的类型,并允许使用 foreach 语句。如果上面的方法是 ListClass 的类定义的一部分,则可以对该类使用 foreach,如下所示:
static void Main()
{
ListClass listClass1 = new ListClass();
foreach (int i in listClass1)
{
System.Console.WriteLine(i);
}
}
foreach 语句调用 ListClass.GetEnumerator() 并使用返回的枚举数来循环访问值。有关如何创建返回 IEnumerator 接口的泛型迭代器的示例,请参见如何:为泛型列表创建迭代器块(C# 编程指南)。
还可以使用命名的迭代器以支持通过不同的方式循环访问同一数据集合。例如,您可以提供一个按升序返回元素的迭代器,而提供按降序返回元素的另一个迭代器。迭代器还可以带有参数,以便允许客户端控制全部或部分迭代行为。下面的迭代器使用命名的迭代器 SampleIterator 实现 IEnumerable 接口:
// Implementing the enumerable pattern
public System.Collections.IEnumerable SampleIterator(int start, int end)
{
for (int i = start; i <= end; i++)
{
yield return i;
}
}
命名的迭代器的调用方法如下:
ListClass test = new ListClass();
foreach (int n in test.SampleIterator(1, 10))
{
System.Console.WriteLine(n);
}
可以在同一个迭代器中使用多个 yield 语句,如下面的示例所示:
public System.Collections.IEnumerator GetEnumerator()
{
yield return "With an iterator, ";
yield return "more than one ";
yield return "value can be returned";
yield return ".";
}
然后可以使用下面的 foreach 语句输出结果:
foreach (string element in new TestClass())
{
System.Console.Write(element);
}
此示例显示以下文本:
With an iterator, more than one value can be returned.
在 foreach 循环的每次后续迭代(或对 IEnumerator.MoveNext 的直接调用)中,下一个迭代器代码体将从前一个 yield 语句之后开始,并继续下一个语句直至到达迭代器体的结尾或遇到 yieldbreak 语句。
请参见
分享到:
相关推荐
它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。所以,今天我们除了讲解迭代器的原理和实
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。...因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的vector 类型也是这样。
iterstuff, 使用迭代器的有用工具 iterstuff为迭代器使用有用工具如果 python2 itertools MODULE 是iterables功能的瑞士军刀,iterstuff 是你可以在密钥环上保留的cut单刀片版本。你可以使用pip从pypi安装 iter
集合类编程题(2),使用迭代器(2).zip
使用迭代器进行数据的遍历,提高开发性能,与struts2中的ognl进行结合使用
主要介绍了使用迭代器模式来进行Java的设计模式编程,文中对迭代器模式中的容器封装方面的知识进行了讲解,需要的朋友可以参考下
一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代...
c++迭代器归纳使用,简单易学。详细参考c++primer这一经典作品
主要介绍了C#中使用迭代器处理等待任务,迭代器是C#的重要特性,文中用迭代器进行了异步编程的相关实践,需要的朋友可以参考下
java Iterator迭代器的使用 java Iterator迭代器的使用 java Iterator迭代器的使用
使用迭代器的方式調用綫程的例子,適合初學者學習迭代器用法
Java设计模式20迭代器模式.pdf
迭代器概述: ...实例:基于list列表创建迭代器,使用next()依次获取list列表的前两个元素,并输出结果。 具体实现: list = [1,2,3,4] it = iter(list) # 创建迭代器对象 print(next(it)) print(next(it))
用java编写的迭代器,实现10数字正反向遍历。
STL迭代器类型 输入迭代器,输出迭代器,双向迭代器,向前迭代器,随机迭代器...
迭代器Iterator.txt 迭代器Iterator.txt迭代器Iterator.txt
迭代器iterator可以很方便的遍历所有元素。Mat类支持迭代器的方式对矩阵元素进行遍历。由于使用迭代器就不需要再使用行列数进行操作。
本文实例讲述了Python使用迭代器捕获Generator返回值的方法。分享给大家供大家参考,具体如下: 用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration...
迭代器模式Demo
java的List集合和列表迭代器的使用,简单的操作,里面附代码,简单易懂。 使用typora可以打开,其他打开会有格式问题,