程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> IEnumerable和IEnumrator用法

IEnumerable和IEnumrator用法

編輯:C#入門知識

先用一個修改過的代碼來演示用法,只來干的,不來稀的。 [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等)來配合,而沒有必要每次都實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved