Early previewThis guide is in development. Items tagged verify are still being checked against official docs.
nebx Learn
GitHub
Menu
C#

C#

A productive, strongly typed language for the whole .NET platform.

Paradigm
OOP, functional features
Typing
Static, strong, nullable-aware
Memory
Generational GC
Runs
.NET runtime (JIT) or Native AOT
Concurrency
Tasks, async/await, channels
Behavioral pattern

Iterator

Intent

Traverses elements of a collection without exposing its underlying representation.

Problem

Clients need to walk a tree depth-first, breadth-first or randomly without knowing how it's stored.

Solution

Extract traversal into iterator objects; most languages now build this in (foreach, for…of, range, generators).

Real-world analogy

Think of it like this

Touring a city: with a paper map, a guide or an app. Same sights, different ways to walk through them.

Structure

association / extends implements / depends on
«interface» Iterator + getNext()+ hasMore(): bool 1 «interface» IterableCollection + createIterator(): Iterator 3 ConcreteIterator - collection- iterationState+ getNext()+ hasMore(): bool 2 ConcreteCollection + createIterator(): Iterator 4 Client 5

Hover or tap a numbered role to highlight it in the diagram.

  1. 1Iterator — Iterator declares traversal operations.
  2. 2ConcreteIterator — Concrete Iterators implement one traversal algorithm and track their own position.
  3. 3IterableCollection — Iterable Collection declares a method that returns a compatible iterator.
  4. 4ConcreteCollection — Concrete Collections return a new iterator each time a client asks.
  5. 5Client — Client works through the interfaces, so collections and iterators stay interchangeable.

Code example

A C# code sample for Iterator is coming soon. Factory Method, Singleton, Decorator, Observer and Strategy already have code in all six languages.

Applicability

Use Iterator when hiding a complex data structure.

Use Iterator when reducing duplicated traversal code.

Pros and cons

Pros

  • Single Responsibility and Open–Closed
  • Parallel iteration over the same collection

Cons

  • Overkill for simple collections

Relations with other patterns

Check yourself

Check yourself

Clients loop over a custom tree depth-first or breadth-first without knowing how it is stored.

Saved in this browser only. Part of Behavioral patterns (0/11).