.NET基础之迭代器

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

使用foreach循环是有IEnumerator接口来实现的,IEnumerator即实现了迭代器,在foreach中如何迭代一个集合arrayList呢?

调用arrayLis.GetEnumberator(),返回一个IEnumberator引用。调用所返回的Enumberator接口的MoveNext()方法。如果MoveNext()返回true,就使用IEnumberator接口的Current属性获取对象的一个引用,用于foreach循环。重复前面两步,知道MoveNext方法返回false为止,此时循环停止。迭代器的实现例子:

classPRogram

{publicstaticvoidMain(string[] args)

{foreach(stringstrinSimpleList())

{

Console.WriteLine(str);

}

Console.ReadKey();

}publicstaticIEnumerable SimpleList()

{yieldreturn"1";yieldreturn"2";yieldreturn"3";

}

}

这样我们就实现了一个最简单的迭代器。结果为: 

下面给个复杂一点的例子,用迭代器实现返回素数:

publicstaticvoidMain(string[] args)

{

Primes primesFrom2TO1000=newPrimes(2,1000);foreach(longiinprimesFrom2TO1000)

{

Console.Write("{0}", i);

}

}

publicclassPrimes

{privatelongmin;privatelongmax;publicPrimes()

:this(2,200)

{ }publicPrimes(longminimum,longmaximum)

{if(minimum <2)

{

min=2;

}else{

min=minimum;

}

max=maximum;

}publicSystem.Collections.IEnumerator GetEnumerator()//返回类型为一个迭代器{for(longpossiblePrime = min; possiblePrime <= max; possiblePrime++)

{boolisPrime =true;for(longpossibleFactor =2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++)

{longremainderAfterDivsion = possiblePrime %possibleFactor;if(remainderAfterDivsion ==0)

{

isPrime=false;

break;

}

}if(isPrime)

{yieldreturnpossiblePrime;//为素数,返回之}

}

}

}

结果为:

 

迭代器返回的类型有两种:IEnumberable和IEnumerator。

如果要迭代一个类,可使用GetEnumerator(),它的返回类型是IEnumerator。如果要迭代一个类成员,例如一个方法,则使用IEnumerable。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航