迭代器是一个代码块,按顺序提供了要在fordeach循环中使用的所用值。一般情况下这个代码块是一个方法,但也可以使用属性访问器和其他代码作为迭代器。下面只介绍方法。
无论代码块是什么,其返回类型都是有限制的。与期望的相反,这个返回类型与所枚举的对象不同。两种可能的返回类型是前面提到的接口类型IEnumerable和IEnumerator。使用这两个类型的场合是:
1,如果迭代一个类成员,例如一个方法(如下面的select方法)则使用IEnumerable。
2,如果迭代一个类,可使用方法GetEnumerator(),其返回类型是IEnumerator。
IEnumerable:
<span style="white-space:pre"> </span>public static IEnumerable select() <span style="font-family: Arial, Helvetica, sans-serif;">//迭代的是类成员函数 返回的是IEnumerable类型</span>
{
yield return "str1";
yield return "str2";
yield break; //break后面的return不会迭代
yield return "str3";
}
static void Main(string[] args)
{
foreach (string str in select()) <pre name="code" class="csharp" style="font-size: 18px;">
{ Console.WriteLine(str); } Console.ReadKey(); }
<strong>结果为:</strong>
<strong><span style="white-space:pre"> </span>str1</strong>
<strong><span style="white-space:pre"> </span>str2</strong>
IEnumerator:
class primes
{
public primes()
{
}
public IEnumerator GetEnumerator()
{
yield return "first";
yield return "second";
yield return "third";
}
<pre name="code" class="csharp">class Program
{
private static primes strs = new primes();
static void Main(string[] args)
{
foreach (string str in strs)
{
Console.WriteLine(str);
}
Console.ReadKey();
}
}
结果为:
<span style="white-space:pre"> </span>first
<span style="white-space:pre"> </span>second
<span style="white-space:pre"> </span>third