IEnumerable和IEnumrator用法

來源:互聯網
上載者:User

先用一個修改過的代碼來示範用法,只來乾的,不來稀的。

/* * 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等)來配合,而沒有必要每次都實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.