先用一個修改過的代碼來演示用法,只來干的,不來稀的。 [csharp /* * Created by SharpDevelop. * User: Owner * Date: 2012-12-14 * Time: 13:43 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Collections; /// <summary> /// IEnumerable和IEnumrator組合起來使用實現foreach。 /// </summary> namespace TestIEnumeratorAndIEnumratable { /// <summary> /// 個體類:這個類保存了單個體的信息和一個方法 /// </summary> public class 個體 { public string 信息1; public string 信息2; public 個體(string 信息1, string 信息2) { this.信息1 = 信息1; this.信息2 = 信息2; } public void 報數() { Console.WriteLine(this.信息1 + " = " + this.信息2); } } /// <summary> /// 集體類:繼承自IEnumerable接口,並提供foreach的可能。 /// </summary> public class 集體 : IEnumerable { /// <summary> /// 集體就是一票個體 /// </summary> private 個體[] 一票個體; /// <summary> /// 這個集體為了簡便,是有初始的一群個體湊一塊組成的。 /// </summary> /// <param name="pArray"></param> public 集體(個體[] pArray) { 一票個體 = new 個體[pArray.Length]; for (int i = 0; i < pArray.Length; i++) 一票個體[i] = pArray[i]; } /// <summary> /// 接口IEnumerable的實現函數,獲取foreach用到的迭代器 /// </summary> /// <returns></returns> public IEnumerator GetEnumerator() { return new 個體指針(一票個體); } } /// <summary> /// 個體指針:針對個體類的迭代器,繼承自IEnumerator。 /// 提供了迭代器的走向函數支持。 /// </summary> public class 個體指針 : IEnumerator { /// <summary> /// 一票個體的指針 /// </summary> public 個體[] 一票個體的指針; /// <summary> /// 迭代器當前位置的指示標志 /// </summary> int 位置 = -1; /// <summary> /// 個體指針的賦值:指向一堆無管理的個體 /// </summary> /// <param name="list"></param> public 個體指針(個體[] list) { 一票個體的指針 = list; } /// <summary> /// 接口IEnumerator的實現函數,迭代器下移。foreach用到,我們不調用。 /// </summary> /// <returns></returns> public bool MoveNext() { 位置++; return (位置 < 一票個體的指針.Length); } /// <summary> /// 接口IEnumerator的實現函數,迭代器復位。foreach用到,我們不調用。 /// </summary> public void Reset() { 位置 = -1; } /// <summary> /// 接口IEnumerator的實現函數,獲取當前值。foreach用到,我們不調用。 /// </summary> public object Current { get { try { return 一票個體的指針[位置]; } catch(IndexOutOfRangeException) { throw new InvalidOperationException(); } } } } class Program { public static void Main(string[] args) { 個體[] 個體集合 = new 個體[3] { new 個體("1", "One"), new 個體("2", "Two"), new 個體("3", "Three") }; 集體 list = new 集體(個體集合); foreach (個體 p in list) p.報數(); Console.ReadKey(); } } } 上面的示例很清楚的演示了IEnumerator(迭代器接口)和IEnumerable(遍歷接口)的用法。普遍代表一切。 我想用個體和集體的概念可以更容易理解這個功能。 照我目前理解,單獨的IEnumerator接口沒有任何用處。 IEnumerable接口可以和系統提供的各種繼承自IEnumerator的類(ArrayList,Queue等)來配合,而沒有必要每次都實現。