1. 如果希望自己的类型是可枚举的,那么就必须能够完成两件事情,使得自己的类型实现IEnumerable接口,以及实现属于它的枚举器接口。
微软给的例子:
public class People : IEnumerable{…}
public class PeopleEnum : IEnumerator{…}
2. 接着,既然是实现接口,就必须实现接口的方法,对于IEnumerable来说,它主要是要求类型必须能够返回属于它的枚举器。
IEnumerator IEnumerable.GetEnumerator()
public PeopleEnum GetEnumerator(){…}
这里需要注意的,由于接口的方法必须被实现,所以首先要实现IEnumerable.GetEnumerator()
但是为了更好的匹配,利用重载函数的最佳匹配原则,可以重新定义一个重载函数。
public PeopleEnum GetEnumerator(){…}
而对于IEnumerator来说,主要是需要能够获取到下一个位置的方法:
public bool MoveNext(){…}
以及获取当前值得方法:
object IEnumerator.Current
public Person Current(){…}
最后还有重置方法
public void Reset(){…}
3. 最终就可以使用了
foreach (Person p in peopleList)
Console.WriteLine(p.firstName + " " + p.lastName);
4. 参考
http://msdn.microsoft.com/zh-cn/library/1t2267t6(v=VS.80).aspx