C# 中的 IEnumerable 与 IEnumerator
在 C# 中,IEnumerable 和 IEnumerator 是用于遍历集合的基本接口。它们提供了一种标准方式来遍历每个元素,而无需暴露集合内部的构建或存储方式。
C# 中的 IEnumerable
在 C# 中,IEnumerable 是一个表示可以迭代的对象的集合的接口。
- 它允许你遍历集合,而无需暴露集合内部的构建或存储方式。
- IEnumerable 有两种形式:非泛型(System.Collections 命名空间)和 泛型(System.Collections.Generic 命名空间)。
在 C# 中,命名空间是用于包含和组织 class、interface 和其他类型的文件夹。
C# 中的非泛型 IEnumerable
非泛型 IEnumerable 属于 "System.Collections" 命名空间,表示任意类型的对象集合,因此无需指定元素类型。
让我们通过一个 C# 示例 来理解 非泛型 IEnumerable。
using System;
using System.Collections;
class Program {
static void Main() {
// 可以存储任意类型的对象
IEnumerable collection = new ArrayList();
collection = new ArrayList { 1, "Hello", 3.5 };
foreach (var item in collection) {
Console.WriteLine(item);
}
}
}
运行此代码时,将产生以下输出 −
1 Hello 3.5
C# 中的泛型 IEnumerable
泛型 IEnumerable 属于 "System.Collections.Generic" 命名空间,表示特定类型(强类型)的对象集合,因此需要指定元素类型。
使用 <T>(如 <int> 或 <string>)来指定类型,这可以防止类型错误并提高性能。
以下 示例 演示了如何在 C# 中使用 泛型 IEnumerable
using System;
using System.Collections.Generic;
class Program {
static void Main() {
IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4 };
foreach (int number in numbers) {
Console.WriteLine(number);
}
}
}
以下是输出 −
1 2 3 4
在这里,集合只能存储整数,这更安全且更快。
C# 中的 IEnumerator
In C#, IEnumerator 是一个接口,它实际执行对集合的迭代,并负责在迭代过程中管理集合中的当前位置。
- 它提供了遍历集合和访问当前元素的方法。
- IEnumerator 也存在两种形式:non-generic(System.Collections 命名空间)和 generic(System.Collections.Generic 命名空间)。
以下是 IEnumerator 的三个成员 −
- Current 属性 − 返回枚举器当前位置的元素。
- MoveNext() 方法 − 将枚举器移动到下一个元素,如果成功移动则返回 true;否则返回 false。
- Reset() 方法 − 将枚举器重置为其初始位置。
C# 中的非泛型 IEnumerator
非泛型 IEnumerator 遍历 IEnumerable 集合,该集合可以包含任何类型的对象。以下 示例展示了其工作原理 −
using System;
using System.Collections;
using System.Collections.Generic;
class Program {
static void Main() {
// 使用 ArrayList,因为它可以存储任何类型的对象
IEnumerable collection = new ArrayList { 1, "Hello", 3.5, 'T', "Aman" };
IEnumerator enumerator = collection.GetEnumerator();
// MoveNext() 移动到下一个元素
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
// 可选:重新开始
enumerator.Reset();
}
}
以下是 输出 −
1 Hello 3.5 T Aman
C# 中的泛型 IEnumerator
泛型 IEnumerator 遍历 IEnumerable 集合,该集合仅包含特定类型的对象。请查看以下 示例 以了解其工作原理 −
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
IEnumerator<int> enumerator = numbers.GetEnumerator();
// Enumerator 的 MoveNext 方法
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
// 可选,重新开始
enumerator.Reset();
}
}
运行此代码将产生以下 输出 −
1 2 3 4 5
说明:IEnumerator 提供了对迭代的手动控制。因此,我们必须显式调用 "MoveNext()" 和 "Current" 来移动到下一个元素。
结论
IEnumerable 和 IEnumerator 用于在 C# 中遍历集合。IEnumerable 提供了一种使用 foreach 循环逐个从集合中获取项的方法。IEnumerator 用于在循环过程中遍历集合并获取每个项。