我是一位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
- 1. 什么是迭代器,C++?
- 2. C++迭代器的生命周期和有效性是什么?
- 3. ObjectSpace - 它是什么以及人们如何使用它?
- 4. 这些方法是什么以及如何从Core Data自动生成它们?
- 5. 什么是OutOfMemoryError异常,以及如何生成它?
- 6. 什么是cufon和画布以及如何覆盖它们
- 7. 如何使用Python C API创建生成器/迭代器?
- 8. C++迭代器做什么?
- 9. 异步生成器不是迭代器?
- 10. 调试生成器和迭代器
- 11. 什么是无限迭代器?为什么要使用它?
- 12. 什么是StringIndexer,VectorIndexer以及如何使用它们?
- 13. SQL,Postgres OID,它们是什么以及它们为什么有用?
- 14. 什么是InputStream和输出流?为什么以及何时使用它们?
- 15. STL容器迭代器和C指针迭代器有什么区别
- 16. 什么用作end()迭代器C++?
- 17. 什么是叶证书和子证书用于以及如何使用它们?
- 18. 什么是PHP代码生成器?
- 19. Java LinkedList迭代器:它们为什么只返回对象?
- 20. 符号常数:它们如何存储以及它们的类型是什么?
- 21. 什么是NULL值,以及如何在SQLite中处理它们
- 22. 什么是sqlite开发标题以及如何安装它们?
- 23. 什么是(void(**)())以及如何typedef它?
- 24. 代表什么是代表以及何时使用它?
- 25. 迭代器与循环以及为什么迭代器是作为循环引入的?
- 26. 什么是表达树,您如何使用它们,以及为什么要使用它们?
- 27. 关于C++枚举和类以及它们是如何工作
- 28. Python生成器 - 什么不使用它
- 29. C++迭代器+整数当迭代器结束时的结果是什么?
- 30. 字体:什么,何时以及如何使用它们?
迭代器通常用于遍历不同类型的列表。迭代器在.net中被称为枚举器。关于迭代器的另一个问题:http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin 2010-09-22 09:53:44