2010-09-22 90 views
9

我是一位VB.Net开发人员,C#中的新手, 在C#文档中,我通过迭代器和生成器来了解,无法完全理解其用法,我有任何人可以解释(在VB感知;如果可能)什么是C#迭代器和生成器,以及如何利用它们

+1

迭代器通常用于遍历不同类型的列表。迭代器在.net中被称为枚举器。关于迭代器的另一个问题:http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin 2010-09-22 09:53:44

回答

14

迭代器是一个简单的方法来生成一个项目序列,而不必自己实现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

+0

这将有助于看到什么时候可能需要这样做的例子。如果您的目标只是允许通过“Joe”“Jack”和“Jane”进行枚举,那么您的简单示例可以替换为一串字符串? – MarkJ 2011-02-16 13:55:31

+0

是的,这个例子不是很有用,你可以轻松地使用数组。有关更多有用的示例,请参阅[Jon Skeet关于将Linq重新实现为对象的系列](http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx);) – 2011-02-16 14:54:01

相关问题