在C#中,IEnumerable<>是一个泛型接口,用于表示一个可枚举的集合。它定义了一个用于遍历集合元素的枚举器(enumerator)。通过实现IEnumerable<>接口,我们可以使用foreach语句或LINQ查询等方式来迭代访问集合中的元素。
IEnumerable<>接口定义了一个名为GetEnumerator的方法,该方法返回一个实现了IEnumerator<>接口的枚举器。IEnumerator<>接口提供了对集合中元素的访问和操作,它包含了MoveNext、Current和Reset等方法,用于在集合上进行迭代。
以下是一个使用IEnumerable<>接口的简单示例,展示了如何自定义一个可枚举的集合:
public class MyCollection<T> : IEnumerable<T>
{// 声明一个私有变量 items,用于存储集合元素private List<T> items = new List<T>();// 添加元素到集合的方法public void Add(T item){items.Add(item);}// 实现 IEnumerable<T> 接口的 GetEnumerator 方法public IEnumerator<T> GetEnumerator(){return items.GetEnumerator();}// 实现 IEnumerable 接口的 GetEnumerator 方法IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}
}public class Program
{public static void Main(string[] args){// 创建一个 MyCollection<int> 类型的集合实例MyCollection<int> collection = new MyCollection<int>();// 向集合中添加元素collection.Add(1);collection.Add(2);collection.Add(3);// 使用 foreach 循环遍历集合中的元素,并输出到控制台foreach (int item in collection){Console.WriteLine(item);}}
}
在这段代码中:
-
MyCollection<T>
类是一个泛型类,用于表示一个集合。它实现了IEnumerable<T>
接口,表示该类的实例可以被枚举遍历。 -
items
是一个私有变量,用于存储集合中的元素。它的类型是List<T>
,即一个泛型列表,用于动态地存储元素。 -
Add
方法用于向集合中添加元素。它接受一个泛型类型的参数item
,并将其添加到items
列表中。 -
GetEnumerator
方法是IEnumerable<T>
接口的实现方法。它返回一个IEnumerator<T>
类型的枚举器,用于在集合上进行迭代。 -
IEnumerable.GetEnumerator
方法是IEnumerable
接口的实现方法。它返回一个非泛型的枚举器,通过调用上面的GetEnumerator
方法来实现。 -
在
Program
类的Main
方法中,我们创建了一个MyCollection<int>
类型的集合实例collection
。 -
使用
collection.Add
方法将整数 1、2 和 3 添加到集合中。 -
使用
foreach
循环遍历集合中的元素,并将每个元素输出到控制台。
在上面的示例中,我们首先定义了一个名为MyCollection的类,实现了IEnumerable接口。这个类内部使用了List来存储元素,并提供了一个Add方法用于向集合中添加元素。
通过实现GetEnumerator方法来返回一个枚举器,我们使得MyCollection类可以被遍历。在Main方法中,我们创建了一个MyCollection实例,并使用foreach语句遍历集合中的元素并输出到控制台。
通过实现IEnumerable<>接口,我们可以方便地对自定义集合进行迭代操作,使得代码更加简洁、可读性更高。**