需要实现IEnumerable接口和 IEnumerator接口
IEnumerable:公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代。
IEnumerator:支持在泛型集合上进行简单迭代。
class Aggregate<T> : IEnumerable<T>
{
List<T> arr = new List<T>();
//索引器 如果类内有多个数组,索引器内可以定义遍历的是哪个
public T this[int index]
{
get { return arr[index]; }
}
//提供push(T value)在尾部添加新元素,
public void push(T value)
{
arr.Add(value);
}
//unshift(T value)在首位添加新元素;
public void unshift(T value)
{
arr.Insert(0, value);
}
//shift()删除并返回第一个元素,
public T shift()
{
T t = arr[0];
arr.RemoveAt(0);
return t;
}
//pop()删除并返回最后一个元素,、
public T pop()
{
T t = arr[arr.Count - 1];
arr.RemoveAt(arr.Count - 1);
return t;
}
//------------------------------------------------------
//返回一个点单的索引器
public IEnumerator<T> GetEnumerator()
{
return new mmm<T>(arr);
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
//
//---------------------------------
class mmm<T> : IEnumerator<T>
{
//Aggregate<T> a =new Aggregate<T>();
List<T> list = new List<T>();
int currentIndex = -1;
//构造函数
public mmm(List<T> arr)
{
list = arr;
}
//获取集合中的当前元素
public T Current
{
get { return list[currentIndex]; }
}
//
public void Dispose()
{
Console.WriteLine();
}
//获取集合中的当前元素。
object System.Collections.IEnumerator.Current
{
get { return this; }
}
//将枚举数推进到集合的下一个元素。如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
public bool MoveNext()
{
currentIndex++;
if (currentIndex < list.Count)
{
return true;
}
return false;
}
//将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
public void Reset()
{
currentIndex = -1;
}
}
}