什么是C#迭代器和生成器,以及如何利用它们

Raj*_*eev 14 .net c# iterator generator enumerators

我是一名VB.Net开发人员,在C#中有点新手,在查看C#文档时,我通过迭代器和生成器来了,无法完全理解使用,我有任何人可以解释(在vb中有洞察力;如果可能的话)

Tho*_*que 22

迭代器是生成一系列项目的简单方法,无需实现IEnumerable<T>/您IEnumerator<T>自己.迭代器是一种返回IEnumerable<T>可以在foreach循环中枚举的方法.

这是一个简单的例子:

public IEnumerable<string> GetNames()
{
    yield return "Joe";
    yield return "Jack";
    yield return "Jane";
}

foreach(string name in GetNames())
{
    Console.WriteLine(name);
}
Run Code Online (Sandbox Code Playgroud)

请注意这些yield return语句:这些语句实际上并不从方法返回,它们只是将下一个元素"推送"给正在阅读实现的人.

当编译器遇到迭代器块时,它实际上将它重写为实现IEnumerable<T>和的类中的状态机IEnumerator<T>.yield return迭代器中的每个语句都对应于该状态机中的状态.

有关迭代器的更多详细信息,请参阅Jon Skeet 撰写的这篇文章.