C#中的迭代器主要是用来实现foreach的值
迭代器可能的返回类型是两个接口类型IEnumerable和IEnumerator.使用这两个接口的主要的场合为:
- 如果要迭代一个类,可使用方法GetEnumerator(),其返回类型是IEnumerator.
- 如果要迭代一个类成员,例如一个方法,则使用IEnumerable.
在迭代器块中,使用yield关键字选择要在佛reach循环中使用的值,使用yield return即可。
举例说明:IEnumerator使用如下:
public static IEnumerable SimpleList()
{
yield return "string 1";
yield return "string 2";
yield return "string 3";
}
static void Main(string[] args)
{
foreach (String item in SimpleList())
{
Console.WriteLine(item);
}
}
类迭代如下:
namespace Ch11Ex03
{
using System.Collections;
public class Primes
{
private long min;
private long max;
public Primes():this(2,100)
{
}
public Primes(long minmum,long maximum)
{
if (min < 2) min = 2;
else
{
min = minmum;
}
max = maximum;
}
public 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 remainderAfterDivision = possiblePrime * possibleFactor;
if(remainderAfterDivision==0)
{
isPrime = false;
break;
}
}
if(isPrime)
{
yield return possiblePrime;
}
}
}
static void Main(string[] args)
{
Primes orimesFrom2To1000=new Primes(2,1000);
foreach (long i in orimesFrom2To1000)
{
Console.Write("{0}",i);
}
}
}
}
测试结果为: