熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#迭代器

2013-11-13 10:02:16  來源: .NET編程 

  迭代器是 C# 中的新功能迭代器是方法get 訪問器或運算符它使您能夠在類或結構中支持 foreach 迭代而不必實現整個 IEnumerable 接口您只需提供一個迭代器即可遍歷類中的數據結構當編譯器檢測到迭代器時它將自動生成 IEnumerable 或 IEnumerable 接口的 CurrentMoveNext 和 Dispose 方法

  迭代器概述

  迭代器是可以返回相同類型的值的有序序列的一段代碼

  迭代器可用作方法運算符或 get 訪問器的代碼體

  迭代器代碼使用 yield return 語句依次返回每個元素yield break 將終止迭代有關更多信息請參見 yield

  可以在類中實現多個迭代器每個迭代器都必須像任何類成員一樣有唯一的名稱並且可以在 foreach 語句中被客戶端代碼調用如下所示foreach(int x in SampleClassIterator){}

  迭代器的返回類型必須為 IEnumerableIEnumeratorIEnumerable 或 IEnumerator

  yield 關鍵字用於指定返回的值到達 yield return 語句時會保存當前位置下次調用迭代器時將從此位置重新開始執行

  迭代器對集合類特別有用它提供一種簡單的方法來迭代不常用的數據結構(如二進制樹)

  廢話不說了先舉個列子供大家參考
    public class DaysOfTheWeek : SystemCollectionsIEnumerable
    {
        string[] m_Days = { Sun Mon Tue Wed Thr Fri Sat };

  public SystemCollectionsIEnumerator GetEnumerator()
        {
            for (int i = ; i < m_DaysLength; i++)
            {
                yield return m_Days[i];
            }
        }
    }

  class TestDaysOfTheWeek
    {
        static void Main()
        {
            // Create an instance of the collection class
            DaysOfTheWeek week = new DaysOfTheWeek();

  // Iterate with foreach
            foreach (string day in week)
            {
                SystemConsoleWrite(day + );
            }
        }
    }

    運行結果為Sun Mon Tue Wed Thr Fri Sat

    再舉個列子請你自己嘗試開發一個小程序要求使用迭代器輸出春夏秋冬四個季節方法當然和上面雷同下面是具體的代碼

  using System;
    using SystemCollectionsGeneric;
    using SystemText;

  namespace Test
    {
        public class Year : SystemCollectionsIEnumerable//實現迭代器的類
        {
            string[] season = { Spring Summer Autumn Winter };

  public SystemCollectionsIEnumerator GetEnumerator()
            {
                for (int i = ; i < seasonLength; i++)
                {
                    yield return season[i];
                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Year y = new Year();
                // 使用迭代器
                foreach (string s in y)
                {
                    SystemConsoleWrite(s + );
                }
                ConsoleReadLine();
            }
        }
    }

    通過上面簡單的介紹希望你對迭代器有個簡單的認識後面還會談到和泛型的關系


From:http://tw.wingwit.com/Article/program/net/201311/12348.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.