1. 程式人生 > >foreach遍歷實現原理_迭代器實現(使用foreach)

foreach遍歷實現原理_迭代器實現(使用foreach)

遍歷陣列或者集合時,之所以使用foreach可以實現,那是因為類中繼承了IEnunerable介面,此介面可以重寫IEnumerator型別的GetEnumerator()方法(此方法即得到一個列舉器),正是因為這個介面(方法)所以foreach才會起到遍歷的作用

上程式碼:

namespace ForeachTest
{
    public class Person : IEnumerable
    {

        private string[] m_love = new string[] { "理智", "林青霞", "李若彤", "劉亦菲" };
        // 得到一個“列舉器”
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < m_love.Length; i++)
            {
                // 使用yield return語句可一次返回一個元素
                // 通過 foreach 語句來使用迭代器方法。 foreach 迴圈的每次迭代都會呼叫迭代器方法。 迭代器方法執行到 yield return 語句時,會返回一個 expression,並保留當前在程式碼中的位置。 下次呼叫迭代器函式時,將從該位置重新開始執行。
                yield return m_love[i];
            }
        }
    }

}


main程式碼:

class Program
    {

        static void Main(string[] args)
        {
            Person person = new Person();
            // 通過foreach來呼叫Person yield return出來的值
            foreach(string item in person) // 這邊可以根據return的值型別來寫接收型別。本次return出來的是string
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }
    }


當然了,foreach迭代器的複雜度完全不止於此,我這只是最簡單的認識。等日後瞭解的更深些了,再來更新。歡迎各位指正 不吝賜教哈