标签:
首先是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(); } } }
关于迭代器中IEnumerable与IEnumerator的区别
标签:
原文地址:http://www.cnblogs.com/JsonZhangAA/p/5372292.html