System.Collections.IEnumerator和System.Collections.Generic.IEnumerator区别,以及典型使用示例,并且给出访问这2种类型数据的成员的方法
时间: 2023-11-22 20:56:13 浏览: 61
`System.Collections.IEnumerator` 和 `System.Collections.Generic.IEnumerator` 都是用于遍历集合类中元素的接口。二者的主要区别在于泛型。
`System.Collections.IEnumerator` 是非泛型接口,用于遍历非泛型集合(如 `ArrayList`、`HashTable` 等),它定义了以下3个成员:
- `Current` 属性:获取当前位置的元素。
- `MoveNext()` 方法:将枚举数推进到集合的下一个元素。
- `Reset()` 方法:将枚举数重置到它的初始位置,该位置位于集合中第一个元素之前。
示例代码:
```csharp
ArrayList list = new ArrayList();
list.Add("Hello");
list.Add("World");
IEnumerator enumerator = list.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
```
`System.Collections.Generic.IEnumerator` 是泛型接口,用于遍历泛型集合(如 `List<T>`、`Dictionary<TKey, TValue>` 等),它定义了以下4个成员:
- `Current` 属性:获取当前位置的元素。
- `MoveNext()` 方法:将枚举数推进到集合的下一个元素。
- `Dispose()` 方法:释放由枚举数使用的所有资源。
- `Reset()` 方法:将枚举数重置到它的初始位置,该位置位于集合中第一个元素之前。
示例代码:
```csharp
List<string> list = new List<string>();
list.Add("Hello");
list.Add("World");
IEnumerator<string> enumerator = list.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
```
需要注意的是,`System.Collections.Generic.IEnumerator` 接口继承自 `System.IDisposable` 接口,因此在使用完毕后需要调用 `Dispose()` 方法释放资源。
访问这两种类型数据的成员方法:
- 对于非泛型集合,可以通过调用集合对象的 `GetEnumerator()` 方法来获取 `System.Collections.IEnumerator` 对象,然后使用 `MoveNext()` 和 `Current` 访问数据。
- 对于泛型集合,可以通过调用集合对象的 `GetEnumerator()` 方法来获取 `System.Collections.Generic.IEnumerator<T>` 对象,然后使用 `MoveNext()` 和 `Current` 访问数据。需要注意的是,在使用完毕后需要调用 `Dispose()` 方法释放资源,可以使用 `foreach` 循环语句来自动调用 `Dispose()` 方法。
阅读全文