C# 中如何实现自定义集合类并支持 foreach 循环?

· 约 7 分钟读完 · 第 113 / 183 章

推荐答案

在 C# 中,要实现自定义集合类并支持 foreach 循环,需要实现 IEnumerable 接口或 IEnumerable<T> 泛型接口。以下是实现自定义集合类并支持 foreach 循环的示例代码:

本题详细解读

1. 实现 IEnumerable 接口

IEnumerable 接口是 C# 中所有集合类的基础接口。它定义了一个方法 GetEnumerator(),该方法返回一个 IEnumerator 对象。IEnumerator 对象用于遍历集合中的元素。

2. 实现 IEnumerator 接口

IEnumerator 接口定义了三个成员:

  • Current:获取集合中的当前元素。
  • MoveNext():将枚举器推进到集合的下一个元素。
  • Reset():将枚举器设置为其初始位置,即集合的第一个元素之前。

3. 自定义集合类

在自定义集合类中,我们实现了 IEnumerable 接口,并在 GetEnumerator() 方法中返回一个自定义的 IEnumerator 对象。这个自定义的 IEnumerator 对象负责遍历集合中的元素。

4. 使用 foreach 循环

foreach 循环依赖于 IEnumerable 接口。当你在自定义集合类上使用 foreach 循环时,C# 编译器会自动调用 GetEnumerator() 方法来获取枚举器,并使用该枚举器遍历集合中的元素。

5. 泛型版本

如果你希望自定义集合类支持泛型,可以实现 IEnumerable<T> 接口。IEnumerable<T> 接口与 IEnumerable 接口类似,但它返回的是 IEnumerator<T> 对象,而不是 IEnumerator 对象。IEnumerator<T> 接口提供了类型安全的 Current 属性。

在这个泛型版本中,MyCollection<T> 类实现了 IEnumerable<T> 接口,并且 MyEnumerator 类实现了 IEnumerator<T> 接口。这使得集合类可以支持类型安全的遍历。