1.不一定要实现 IEnumerable接口;
2.类中定义与 IEnumerable接口中的GetEnumerator()方法相同的方法即可(方法名,返回值,参数都一致)。
class Program
{
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5 };
IntArray intArray = new IntArray(array);
//测试,可以使用foreach
foreach (int i in intArray)
{
//do some things
}
}
/// <summary>
/// 自定义IntArray类
/// 注意:
/// 1.没有实现IEnumerable接口
/// 2.类中定义了GetEnumerator()方法,该方法与IEnumerable接口中的方法一致
/// </summary>
private class IntArray
{
private int[] m_array;
public IntArray(int[] array)
{
m_array = array;
}
public IEnumerator GetEnumerator()
{
//注意:需要返回一个实现了IEnumerator接口的对象
return new MyEnumerator(m_array);
}
}
private class MyEnumerator : IEnumerator
{
private int index = -1;//记录当前迭代器的位置,初始为-1
private int[] intArray;//当前集合
public MyEnumerator(int[] array)
{
intArray = array;
}
//实现接口方法
public object Current
{
get { return intArray[index]; }
}
//实现接口方法
public bool MoveNext()
{
index++;
if (index < intArray.Length)
{
return true;
}
return false;
}
//实现接口方法
public void Reset()
{
index = -1;
}
}
}