我们还需要Iterator设计模式吗?

kev*_*vin 5 c# java design-patterns

嗨伙计们,我正在学习设计模式,我找到了Iterator.我们还需要使用吗?由于我们有收藏,我很困惑为什么我们仍然需要Iterator设计模式.

谢谢

Pét*_*rök 7

事实上,集合在两种语言中都主动使用迭代器.每当你遍历集合的元素时,都会涉及某种迭代器,即使你没有在代码中明确地看到它.我用Java来举例,因为我对它更熟悉.

在Java 5之前迭代集合的首选习惯用法 - 使用Iterator显式:

for (Iterator i = c.iterator(); i.hasNext(); ) {
  doSomething((Element) i.next()); // (No generics before 1.5)
}
Run Code Online (Sandbox Code Playgroud)

从Java 5开始:

for (Element e : elements) {
  doSomething(e);
}
Run Code Online (Sandbox Code Playgroud)

后者导致实际上相同的字节码,使用Iterator幕后.


Cod*_*aos 7

IEnumerator<T>是一个迭代器并IEnumerable<T>创建它们.几乎所有的集合都实现了IEnumerable<T>.

它是Linq-To-Objects的核心,这是C#3的核心功能之一.因此迭代器在现代C#中非常重要.

C#3还引入了一种特殊的语言功能,允许您使用yield return语法轻松实现迭代器.

foreach 也基于迭代器.