你的位置:首页 > ASP.net教程

[ASP.net教程]关于迭代器中IEnumerable与IEnumerator的区别


首先是IEnumerable与IEnumerator的定义:

1.IEnumerable接口允许使用foreach循环,包含GetEnumerator()方法,可以迭代集合中的项。

2.IEnumerator接口是一个真正的集合访问器,它包含MoveNext()方法和Current属性,在foreach循环中,如果MoveNext()返回True,则就是用IEnumerator接口的Current属性来获取对象的一个引用,用于foreach循环。

下面是自定义的一个迭代器的例子:

Primer.CS

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Ch11Ex03_Exam{  public class Primes  {    private long min;    private long max;    public Primes():this(2,100)    {          }    public Primes(long minNum,long maxNum)    {      if(minNum<2)      {        min=2;      }else{        min = minNum;      }      max = maxNum;    }    public IEnumerator GetEnumerator()//返回的是IEnumerator    {      for(long i=min;i<max;i++)      {        int flag = 1;        for(long j=2;j<Math.Sqrt(min);j++)        {          if(i%j==0)          {            flag = 0;            break;          }        }        if(flag==1)        {          yield return i;        }      }    }  }}

Program.CS:

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Ch11Ex03_Exam{  class Program  {    static void Main(string[] args)    {      Primes s = new Primes(2, 100);      foreach(long i in s)      {        Console.WriteLine("{0}\t", i);      }      Console.ReadKey();    }  }}