在软件开发中,我们经常需要遍历集合中的元素,比如遍历一个列表、数组或者自定义的数据结构。如果每次都要写一堆 for 或 foreach 循环,不仅代码冗余,而且难以维护。这时候,迭代器模式就派上用场了!
本文将带你从零开始理解 C#设计模式 中的 迭代器模式,即使是编程小白也能轻松上手。我们将通过实际代码示例,讲解如何在 C# 中实现和使用迭代器模式,并了解它带来的好处。
迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
简单来说,就是把“遍历”这个操作从集合类中抽离出来,封装到一个独立的“迭代器”类中。这样,集合类只负责存储数据,而遍历逻辑由迭代器来处理。

其实,C# 早已内置了对迭代器的支持!你每天都在用的 foreach 循环,底层就是基于迭代器模式实现的。
只要一个类实现了 IEnumerable 接口(或 IEnumerable<T>),它就可以被 foreach 遍历。而 IEnumerable 接口要求返回一个实现了 IEnumerator 的对象——这就是标准的迭代器。
下面我们来创建一个简单的“书架”类(BookShelf),并为它实现一个自定义迭代器。
public class Book{ public string Title { get; set; } public Book(string title) { Title = title; } public override string ToString() { return Title; }}using System.Collections;using System.Collections.Generic;public class BookShelf : IEnumerable<Book>{ private List<Book> _books = new List<Book>(); public void AddBook(Book book) { _books.Add(book); } // 实现 IEnumerable<Book> 接口 public IEnumerator<Book> GetEnumerator() { return new BookShelfIterator(_books); } // 显式实现非泛型版本 IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }}using System.Collections;using System.Collections.Generic;public class BookShelfIterator : IEnumerator<Book>{ private List<Book> _books; private int _currentIndex = -1; public BookShelfIterator(List<Book> books) { _books = books; } public Book Current => _books[_currentIndex]; object IEnumerator.Current => Current; public bool MoveNext() { _currentIndex++; return _currentIndex < _books.Count; } public void Reset() { _currentIndex = -1; } public void Dispose() { // 如果有非托管资源,这里释放 }}class Program{ static void Main(string[] args) { var shelf = new BookShelf(); shelf.AddBook(new Book("C#高级编程")); shelf.AddBook(new Book("设计模式之美")); shelf.AddBook(new Book("算法导论")); // 使用 foreach 遍历 —— 这就是迭代器模式的体现! foreach (var book in shelf) { Console.WriteLine(book); } }}运行结果:
C#高级编程设计模式之美算法导论其实,在 C# 中,你甚至不需要手动实现 IEnumerator!使用 yield return 可以让编译器自动为你生成迭代器。
public class SimpleBookShelf : IEnumerable<Book>{ private List<Book> _books = new List<Book>(); public void AddBook(Book book) => _books.Add(book); public IEnumerator<Book> GetEnumerator() { foreach (var book in _books) { yield return book; } } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();}这种方式更简洁,也更常用。但理解底层原理(即手动实现迭代器)对于掌握 C#迭代器 的工作机制非常重要。
通过本篇 设计模式教程,你已经学会了:
yield 简化迭代器编写记住,C#设计模式 不是炫技,而是解决实际问题的工具。当你下次需要遍历一个复杂结构时,不妨想想:是否可以用迭代器模式让它变得更优雅?
掌握 C#迭代器,让你的代码更专业、更灵活!
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124577.html