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