Tutorials Design Patterns in C#

Iterator Pattern — Complete Guide

Iterator Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.

On this page

Design Patterns in C# · Lesson 16 of 69

Iterator Pattern

GoF Core ✓EnterpriseCloud & Craft

Enterprise · 2 — App patterns · ~6 min · Module 3: Behavioral Design Patterns

What is this?

Iterator walks a collection without exposing its internal structure — C# foreach/IEnumerable already implements this.

Why should you care?

ShopNest custom paginated catalog cursors should feel like foreach without leaking SQL details.

See it live — copy this example

Paste into a C# console or class library project and run dotnet run.

public sealed class SkuPage
{
    private readonly string[] _skus;
    public SkuPage(params string[] skus) => _skus = skus;
    public IEnumerator<string> GetEnumerator()
    {
        foreach (var s in _skus) yield return s;
    }
}

foreach (var sku in new SkuPage("HD-100", "HD-200"))
    Console.WriteLine(sku);

Run Example »

Edit the code below and click Run to see the result in Toolliyo’s live editor.

Code
Result

What happened?

  • yield return builds an iterator state machine.
  • Callers foreach without knowing the array.
  • Rarely build a manual IEnumerator unless you need special cursor semantics.

Practice next

  1. Foreach the SkuPage.
  2. Add a Filter iterator with yield.
  3. Prefer IAsyncEnumerable for streaming APIs.
  4. Yield only SKUs starting with HD.
  5. Write an async iterator reading pages.

Remember

Traverse without exposing guts. IEnumerable/yield in C#. Custom iterators for cursors.

ShopNest catalog cursor

API streams SKUs via IAsyncEnumerable.

Outcome: Clients iterate pages without SQL knowledge.

Interview prep for this lesson

Practice these questions aloud after reading—each links to a full structured answer.

Mid PDF Detailed
Iterator Interface (IIterator<T>):?
Short answer: The IIterator&lt;T&gt; interface defines two primary methods: ■ HasNext(): Checks if there are more elements to iterate over. ■ Next(): Returns the next element in the collection. public interface IIterator…
Mid PDF Detailed
Abstract Factory (LoggerFactory):?
Short answer: The LoggerFactory class defines a factory method CreateLogger that returns an ILogger object. This is a generic interface for creating various logger types without specifying the concrete class directly. Re…
Mid PDF Detailed
Redo Functionality:?
Short answer: You can extend the system by adding redo functionality. After an undo operation, you could store the undone command in a separate stack and allow users to redo the previous undo operation. Real-world exampl…
Mid PDF Detailed
Abstract Expression (IExpression):?
Short answer: The IExpression interface declares an Interpret method, which is the core of the interpreter pattern. This method is used to interpret and evaluate expressions. public interface IExpression Example code { i…
Mid PDF Detailed
Mediator (ChatMediator):?
Short answer: The mediator manages communication between the users. It maintains a list of all users and broadcasts messages to all other users when one user sends a message. This keeps the users from directly knowing ab…
Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

Design Patterns in C#
Course syllabus

Design Patterns in C# Tutorial

Module 1: Creational Design Patterns
Module 2: Structural Design Patterns
Module 3: Behavioral Design Patterns
Module 4: Enterprise Design Patterns
Module 5: Modern Enterprise Patterns
Module 6: Microservices & Cloud Patterns
Module 7: ASP.NET Core Architecture Patterns
Module 8: Interview & System Design
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details