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

时间:2010-09-22 09:47:49

标签: c# .net iterator generator enumerators

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

1 个答案:

答案 0 :(得分: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);
}

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

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

有关迭代器的详细信息,请参阅Jon Skeet的this article