什么是C#迭代器和生成器,以及如何利用它们
我是一位VB.Net开发人员,C#中的新手, 在C#文档中,我通过迭代器和生成器来了解,无法完全理解其用法,我有任何人可以解释(在VB感知;如果可能)什么是C#迭代器和生成器,以及如何利用它们
迭代器是一个简单的方法来生成一个项目序列,而不必自己实现IEnumerable<T>
/IEnumerator<T>
。迭代器是一种返回可以在foreach循环中枚举的IEnumerable<T>
的方法。
这里有一个简单的例子:
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。
这将有助于看到什么时候可能需要这样做的例子。如果您的目标只是允许通过“Joe”“Jack”和“Jane”进行枚举,那么您的简单示例可以替换为一串字符串? – MarkJ 2011-02-16 13:55:31
是的,这个例子不是很有用,你可以轻松地使用数组。有关更多有用的示例,请参阅[Jon Skeet关于将Linq重新实现为对象的系列](http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx);) – 2011-02-16 14:54:01
迭代器通常用于遍历不同类型的列表。迭代器在.net中被称为枚举器。关于迭代器的另一个问题:http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin 2010-09-22 09:53:44