.NET基础之迭代器
调用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。