IEnumerator和IEnumerable
时间: 2023-08-11 11:08:28 浏览: 88
`IEnumerator` 和 `IEnumerable` 两个接口是 C# 中用于实现迭代器的关键接口。
`IEnumerable` 接口有一个方法 `GetEnumerator()`,它返回一个实现了 `IEnumerator` 接口的对象,该对象可以迭代集合中的元素。实现了 `IEnumerable` 接口的类可以使用 `foreach` 循环迭代集合中的元素。
`IEnumerator` 接口定义了三个方法:
- `MoveNext()`:将枚举数推进到集合的下一个元素。
- `Reset()`:将枚举数重置为其初始位置,即在集合中第一个元素之前。
- `Current`:获取集合中的当前元素。
`IEnumerator` 接口的实现类需要在 `MoveNext()` 方法中实现迭代器的逻辑,并在 `Current` 属性中返回当前元素的值。
示例代码:
```csharp
public class MyCollection : IEnumerable
{
private int[] array = { 1, 2, 3, 4 };
public IEnumerator GetEnumerator()
{
return new MyEnumerator(array);
}
private class MyEnumerator : IEnumerator
{
private int[] array;
private int position = -1;
public MyEnumerator(int[] array)
{
this.array = array;
}
public bool MoveNext()
{
position++;
return (position < array.Length);
}
public void Reset()
{
position = -1;
}
public object Current
{
get
{
try
{
return array[position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
}
}
```
上述代码中,`MyCollection` 类实现了 `IEnumerable` 接口,并在 `GetEnumerator()` 方法中返回了一个实现了 `IEnumerator` 接口的对象。`MyEnumerator` 类实现了 `IEnumerator` 接口,并在 `MoveNext()` 方法中实现了迭代器的逻辑,同时在 `Current` 属性中返回当前元素的值。这样,我们就可以通过 `foreach` 循环来迭代 `MyCollection` 类中的元素了。
阅读全文