C# 迭代器 詳解

來源:互聯網
上載者:User

這裡僅針對非泛型迭代器加以說明,泛型迭代器類似。

代碼一:

 

public class Cars
    {
        private int[] intArr = { 1, 2, 3, 4, 5, 6, 7 };

        /// <summary>
        /// 命名迭代器
        /// </summary>
        /// <param name="isReverse">是否倒序迭代</param>
        /// <returns></returns>
        public IEnumerable SortEnum(bool isReverse)
        {
            if (!isReverse)
            {
                for (int i = 0; i < intArr.Length; i++)
                {
                    yield return intArr[i];
                }
            }
            else
            {
                for (int i = intArr.Length - 1; i >= 0; i--)
                {
                    yield return intArr[i];
                }
            }
        }//fun
    }//clas

然後就可以對該類進行迭代操作了,代碼如下: 

Cars c = new Cars();                foreach (var item in c.SortEnum(true))                {                    Console.WriteLine(item);                }

 

 

其實編譯時間編譯器為該類產生了一個內部類,該內部類就實現了IEnumerable和IEnumerator這兩個介面。

 

代碼二:

返回IEnumerator的方法

 public class Cars
    {
        public IEnumerator GetEnumerator()
        {
            yield return "1";
            yield return "2";
            yield return "3";
        }//fun
    }//clas

 範例程式碼如下:

//注意這裡c2不用調用方法了 Cars c2 = new Cars();                foreach (var item in c2)                {                    Console.WriteLine(item);                }

 

編譯器也為該類產生了一個內部類,該內部類實現了IEnumerator介面。 

 

     由此可見,使用yield文法,一個類型要想可以使用foreach遍曆其子項目,只要滿足下面兩個條件之一即可:

1)有一個返回 IEnumerable 的方法,該方法內部是yield語句。

2)有一個public IEnumerator GetEnumerator() 簽名的方法,內部使用yield語句。

 

上述代碼之所以能那麼寫,是因為編譯器幫我們實現了我們沒有手動實現的條件。 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.