使用 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