1. IEnumerable接口介绍
IEnumerable接口是C#中用于定义枚举器的接口,它提供了一种访问集合的方式,使得集合能够被foreach循环遍历。IEnumerable接口定义了一个用于返回IEnumerator对象的GetEnumerator方法,而IEnumerator接口负责执行实际的枚举操作。
1.1 IEnumerator接口
IEnumerator接口包含两个重要的方法,分别是MoveNext()和Reset()。MoveNext()方法用于使枚举器向下一个元素移动,如果成功移动到下一个元素,则返回true,否则返回false。Reset()方法用于将枚举器重置到初始位置。
2. 自定义集合实现IEnumerable接口
为了使自定义的集合能够被foreach循环遍历,需要实现IEnumerable接口。下面是一个简单的自定义集合的示例:
class MyCollection : IEnumerable
{
private T[] collection;
public MyCollection(T[] collection)
{
this.collection = collection;
}
public IEnumerator GetEnumerator()
{
return new MyEnumerator(collection);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
class MyEnumerator : IEnumerator
{
private T[] collection;
private int currentIndex = -1;
public MyEnumerator(T[] collection)
{
this.collection = collection;
}
public T Current
{
get { return collection[currentIndex]; }
}
object IEnumerator.Current
{
get { return Current; }
}
public bool MoveNext()
{
currentIndex++;
return currentIndex < collection.Length;
}
public void Reset()
{
currentIndex = -1;
}
public void Dispose() { }
}
2.1 MyCollection类
MyCollection类是实现了IEnumerable接口的自定义集合类,它包含一个存储元素的数组,通过实现IEnumerable接口的GetEnumerator方法,返回一个MyEnumerator对象。
2.2 MyEnumerator类
MyEnumerator类是实现了IEnumerator接口的自定义枚举器类,它通过实现IEnumerator接口的MoveNext和Reset方法,以及定义Current属性来实现对集合的枚举操作。
3. 使用自定义集合进行枚举
使用自定义集合进行枚举的方法和使用内置集合类类似,只需要将自定义集合对象放在foreach循环中即可。下面是使用自定义集合的示例:
static void Main(string[] args)
{
string[] names = { "Alice", "Bob", "Charlie" };
MyCollection collection = new MyCollection(names);
foreach (string name in collection)
{
Console.WriteLine(name);
}
}
运行上述代码,将会依次输出"Alice"、"Bob"和"Charlie",说明自定义集合类成功实现了IEnumerable接口,并能够被foreach循环正确地枚举。
4. 总结
IEnumerable接口是C#中用于定义枚举器的接口,通过实现该接口,可以使自定义集合能够被foreach循环正确地枚举。本文介绍了IEnumerable接口和IEnumerator接口的基本用法,并演示了如何使用自定义集合实现IEnumerable接口。通过自定义集合的示例,我们可以更好地理解和使用IEnumerable接口。
总结:通过实现IEnumerable接口,可以使自定义集合能够被foreach循环正确地枚举。