使用 Yield 创建迭代器
迭代器生成枚举器。在 C#中,通过定义包含 yield
语句的方法,属性或索引器来生成枚举器。
大多数方法都会通过普通的 return
语句将控制权返回给调用者,这些语句将所有状态本地配置到该方法。相反,使用 yield
语句的方法允许它们在请求时向调用者返回多个值,同时保留中间状态返回这些值。这些返回值构成序列。迭代器中使用了两种类型的 yield
语句:
-
yield return
,它将控制权返回给调用者但保留状态。当控制权传递给它时,被调用者将继续从该行执行。 -
yield break
,其功能与普通的return
语句类似 - 这表示序列的结束。正常的return
语句本身在迭代器块中是非法的。
下面的示例演示了一个可用于生成 Fibonacci 序列的迭代器方法 :
IEnumerable<int> Fibonacci(int count)
{
int prev = 1;
int curr = 1;
for (int i = 0; i < count; i++)
{
yield return prev;
int temp = prev + curr;
prev = curr;
curr = temp;
}
}
然后,可以使用此迭代器生成可由调用方法使用的 Fibonacci 序列的枚举器。下面的代码演示了如何枚举 Fibonacci 序列中的前十个术语:
void Main()
{
foreach (int term in Fibonacci(10))
{
Console.WriteLine(term);
}
}
输出
1
1
2
3
5
8
13
21
34
55