文章目录
- 介绍
-
-
- 主要成员
- 示例代码
-
- 约束
-
-
- 常见的约束类型
- 示例代码
-
介绍
在C#中,IEnumerable<T>
是一个泛型接口,用于表示可以被枚举的集合。它定义了用于遍历集合中元素的方法和属性。IEnumerable<T>
是 IEnumerable
的泛型版本,提供了类型安全的枚举功能。
当我们实现一个自定义的集合类并希望该类支持枚举功能时,通常需要实现 IEnumerable<T>
接口。
主要成员
- GetEnumerator():这是
IEnumerable<T>
接口中的一个方法,返回一个 IEnumerator 类型的枚举器对象。该枚举器对象用于遍历集合中的元素。IEnumerator<T>
提供了MoveNext()
、Reset()
和Current
属性等方法,用于控制枚举过程。 - MoveNext()
效果:将枚举器向前移动,到集合的下一个元素。
返回值:返回一个布尔值,表示是否成功移动到下一个元素。如果枚举器成功移动到下一个元素,则返回 true;如果枚举器已经到达集合的末尾,则返回 false。
在遍历集合时,通常在一个循环中调用 MoveNext(),直到它返回 false,表示已经遍历完所有元素。如果是通过foreach遍历,则不需要手动调用。 - Reset()
效果:将枚举器重置到集合的起始位置。
返回值:没有返回值。
当需要重新遍历同一个集合时,可以使用 Reset() 方法将枚举器重置到起始位置。不过,在实际使用中,Reset() 方法的使用频率相对较低,因为通常更倾向于重新获取一个新的枚举器来遍历集合。 - Current:获取当前枚举器所处位置的元素。
- IEnumerable.GetEnumerator():这是 IEnumerable 接口中的一个方法,返回一个 IEnumerator 类型的枚举器对象。该枚举器对象用于遍历集合中的元素,但不提供类型安全
返回一个IEnumerator类型的对象,这是一个非泛型接口,返回的对象需要进行类型转换才能访问集合中的元素
示例代码
下面是一个简单的示例,展示如何实现和使用 IEnumerable<T>
接口
首先,我们创建一个自定义的集合类,该类实现了 IEnumerable<T>
接口:
using System;
using System.Collections;
using System.Collections.Generic;
publicclass MyCollection<T> : IEnumerable<T>
{
private readonly List<T> items = new();
public void Add(T item)
{
items.Add(item);
}
public IEnumerator<T> GetEnumerator()
{
return items.GetEnumerator();