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