C#中IEnumerable接口介绍并实现自定义集合

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循环正确地枚举。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签