C# 如何理解迭代器?
时间: 2024-08-25 08:00:14 浏览: 47
在C# 中,迭代器(Iterator)是一种特殊的设计模式,它使得数据源(如数组、列表或其他容器)能够按需逐个提供元素,而不需要一次性复制所有元素到内存中。迭代器通常由两个部分组成:一个实现了 `IEnumerator<T>` 或 `IEnumerator` 接口的类(称为迭代器类),以及一个公开的返回该迭代器的 `GetEnumerator()` 方法。
当你编写迭代器时,会定义一组yield关键字的表达式,它们会在每次调用 `MoveNext()` 方法时暂停并返回下一个值。这种方式可以使你在处理大型数据集时避免性能开销,同时保持代码简洁和易于管理。
下面是一个简单的迭代器示例,计算数组中每个数的平方:
```csharp
public class SquareNumbersIterator
{
private int[] array;
private int currentIndex;
public SquareNumbersIterator(int[] array)
{
this.array = array;
currentIndex = -1;
}
public IEnumerator<int> GetEnumerator()
{
foreach (var num in array)
{
currentIndex++;
yield return num * num;
}
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
// 使用迭代器
int[] numbers = {1, 2, 3, 4, 5};
SquareNumbersIterator iterator = new SquareNumbersIterator(numbers);
foreach (int square in iterator)
{
Console.WriteLine(square);
}
```
阅读全文