返回

枚举器和迭代器——C# 强大的遍历工具

开发工具

前言

在 C# 中,foreach 语句是遍历数组或集合中元素的常用方法。它使用起来非常简单,只需将要遍历的数据结构放在 foreach 语句的括号中即可。

int[] numbers = { 1, 2, 3, 4, 5 };

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

上面这段代码会将 numbers 数组中的每个元素都打印到控制台。

枚举器

foreach 语句能够遍历数据结构,是因为数据结构实现了 IEnumerable 接口。IEnumerable 接口定义了一个名为 GetEnumerator 的方法,该方法返回一个枚举器。枚举器是一个对象,它可以逐个访问数据结构中的元素。

IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

IEnumerator<int> enumerator = numbers.GetEnumerator();

while (enumerator.MoveNext())
{
    int number = enumerator.Current;
    Console.WriteLine(number);
}

上面这段代码和前面的代码功能相同,但它使用了显式的枚举器来遍历数据结构。

迭代器

迭代器是枚举器的子类,它提供了一种更简单的方式来遍历数据结构。迭代器允许您使用 yield 来返回数据结构中的元素。

IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
    yield return 4;
    yield return 5;
}

foreach (int number in GetNumbers())
{
    Console.WriteLine(number);
}

上面这段代码定义了一个名为 GetNumbers 的方法,该方法返回一个迭代器。迭代器使用 yield 关键字来返回数据结构中的元素。foreach 语句能够遍历迭代器,并逐个访问其中的元素。

枚举器和迭代器的区别

枚举器和迭代器之间最主要的区别在于,枚举器是一个对象,而迭代器是一种语法糖。这意味着您可以显式地创建枚举器,也可以使用 yield 关键字来隐式地创建迭代器。

另一个区别是,枚举器只能向前遍历数据结构,而迭代器可以向前或向后遍历数据结构。

结语

枚举器和迭代器是 C# 中用于遍历数据结构的两个强大工具。它们的使用方法非常简单,而且可以大大提高代码的可读性和可维护性。