C#编程:使用迭代器

创建迭代器最常用的方法是对 IEnumerable 接口实现 GetEnumerator 方法,例如:

10年积累的成都做网站、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有黄陂免费网站建设让你可以放心的选择与我们合作。

 
 
 
  1. public System.Collections.IEnumerator GetEnumerator()  
  2. {  
  3.     for (int i = 0; i <  max; i++)  
  4.     {  
  5.         yield return i;  
  6.     }  

GetEnumerator 方法的存在使得类型成为可枚举的类型,并允许使用 foreach 语句。如果上面的方法是 ListClass 的类定义的一部分,则可以对该类使用 foreach,如下所示:

 
 
 
  1. static void Main()  
  2. {  
  3.     ListClass listClass1 = new ListClass();  
  4.  
  5.     foreach (int i in listClass1)  
  6.     {  
  7.         System.Console.WriteLine(i);  
  8.     }  

foreach 语句调用 ListClass.GetEnumerator() 并使用返回的枚举数来循环访问值。有关如何创建返回 IEnumerator 接口的泛型迭代器的示例,请参见 如何:为泛型列表创建迭代器块(C# 编程指南)。

还可以使用命名的迭代器以支持通过不同的方式循环访问同一数据集合。例如,您可以提供一个按升序返回元素的迭代器,而提供按降序返回元素的另一个迭代器。迭代器还可以带有参数,以便允许客户端控制全部或部分迭代行为。下面的迭代器使用命名的迭代器 SampleIterator 实现 IEnumerable 接口:

 
 
 
  1. // Implementing the enumerable pattern  
  2. public System.Collections.IEnumerable SampleIterator(int start, int end)  
  3. {  
  4.     for (int i = start; i < = end; i++)  
  5.     {  
  6.         yield return i;  
  7.     }  

命名的迭代器的调用方法如下:

 
 
 
  1. ListClass test = new ListClass();  
  2. foreach (int n in test.SampleIterator(1, 10))  
  3. {  
  4.     System.Console.WriteLine(n);  

可以在同一个迭代器中使用多个 yield 语句,如下面的示例所示:

 
 
 
  1. public System.Collections.IEnumerator GetEnumerator()  
  2. {  
  3.     yield return "With an iterator, ";  
  4.     yield return "more than one ";  
  5.     yield return "value can be returned";  
  6.     yield return ".";  

然后可以使用下面的 foreach 语句输出结果:

 
 
 
  1. foreach (string element in new TestClass())  
  2. {  
  3.     System.Console.Write(element);  

此示例显示以下文本:

 
 
 
  1. With an iterator, more than one value can be returned.  

在 foreach 循环的每次后续迭代(或对 IEnumerator.MoveNext 的直接调用)中,下一个迭代器代码体将从前一个 yield 语句之后开始,并继续下一个语句直至到达迭代器体的结尾或遇到 yield break 语句。

【编辑推荐】

  1. C# winForm自定义鼠标样式的两种方法
  2. C#自定义消息框的设置图解
  3. 掌握C#自定义泛型类:从初始化说起
  4. C#存储过程的循序渐进
  5. 存储过程的优势及其调用方法介绍

文章题目:C#编程:使用迭代器
浏览路径:http://www.shufengxianlan.com/qtweb/news6/47706.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联