现在的位置: 主页 > 新闻中心 > 文章正文

.NET基础之迭代器

作者:成都昌德装饰工程有限公司 来源:www.cdchangde.com 发布时间:2017-09-08 18:16:55
.NET基础之迭代器 使用foreach循环是有IEnumerator接口来实现的,IEnumerator即实现了迭代器,在foreach中如何迭代一个集合arrayList呢?

调用arrayLis.GetEnumberator(),返回一个IEnumberator引用。

调用所返回的Enumberator接口的MoveNext()方法。

如果MoveNext()返回true,就使用IEnumberator接口的Current属性获取对象的一个引用,用于foreach循环。

重复前面两步,知道MoveNext方法返回false为止,此时循环停止。

迭代器的实现例子:

复制代码

class Program

{

public static void Main(string[] args)

{

foreach (string str in SimpleList())

{

Console.WriteLine(str);

}

Console.ReadKey();

}

public static IEnumerable SimpleList()

{

yield return "1";

yield return "2";

yield return "3";

}

}

复制代码

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

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

复制代码

public static void Main(string[] args)

{

Primes primesFrom2TO1000 = new Primes(2, 1000);

foreach (long i in primesFrom2TO1000)

{

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

}

}

复制代码

复制代码

public class Primes

{

private long min;

private long max;

public Primes()

: this(2, 200)

{ }

public Primes(long minimum, long maximum)

{

if (minimum < 2)

{

min = 2;

}

else

{

min = minimum;

}

max = maximum;

}

public System.Collections.IEnumerator GetEnumerator()//返回类型为一个迭代器

{

for (long possiblePrime = min; possiblePrime <= max; possiblePrime++)

{

bool isPrime = true;

for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++)

{

long remainderAfterDivsion = possiblePrime % possibleFactor;

if (remainderAfterDivsion == 0)

{

isPrime = false;

break;

}

}

if (isPrime)

{

yield return possiblePrime;//为素数,返回之

}

}

}

}

复制代码

结果为:

QQ截图20141114212209

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

如果要迭代一个类,可使用GetEnumerator(),它的返回类型是IEnumerator。

如果要迭代一个类成员,例如一个方法,则使用IEnumerable。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:荆门SEO http://jingmen.4567w.com

上一篇:struts2 捕获404错误的常用方法 下一篇:最后一页