资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C#中如何使用迭代器

今天就跟大家聊聊有关C#中如何使用迭代器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联是一家专业提供黄山企业网站建设,专注与网站设计、成都做网站、html5、小程序制作等业务。10年已为黄山众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

创建迭代器最常用的方法是对 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 语句之后开始,并继续下一个语句直至到达迭代器体的结尾或遇到 yield break 语句。

看完上述内容,你们对C#中如何使用迭代器有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网站栏目:C#中如何使用迭代器
文章来源:http://cdkjz.cn/article/gcsijh.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220