返回
枚举器和迭代器——C# 强大的遍历工具
开发工具
2023-11-07 21:15:41
前言
在 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# 中用于遍历数据结构的两个强大工具。它们的使用方法非常简单,而且可以大大提高代码的可读性和可维护性。