C#中foreach的實現原理
工具
在探討foreach如何內部如何實現這個問題以前,咱們須要理解兩個C#裏邊的接口,IEnumerable 與 IEnumerator. 在C#裏邊的遍歷集合時用到的相關類中,IEnumerable是最基本的接口。這是一個能夠進行泛型化的接口,好比說IEnumerable<User>.在微軟的.NET推出了這兩個接口後,纔有了foreach的用法,能夠說,foreach是創建在這兩個接口的基礎之上的,foreach的前提是其裏邊的容器要實現了IEnumerable接口。spa
IEnumerable 這個接口裏邊定義的內容很是簡單,最重要的就是裏邊有一個抽象方法GetEnumerator. IEnumerable的意思是這個集合是能夠遍歷的,而這個GetEnumerator方法返回的IEnumerator的就是一個遍歷器,用這個工具來遍歷這個類。若是說IEnumerable 是一瓶香檳,那麼IEnumerator就是一個開瓶器。在實現這個IEnumerable接口的時候,必需要實現這個GetEnumerator方法,要返回一個實例化的IEnumorator.接口
下面來介紹一下這個IEnumorator接口。這個接口中定義的內容也很簡單,包括Current,就是返回這個遍歷工具所指向的那個容器的當前的元素,MoveNext 方法就是指向下一個元素,當遍歷到最後沒有元素時,返回一個false.當咱們實現一個IEnumerable類的時候,咱們的目的就應該是遍歷這個集合,因此同時咱們要實現IEnumerator這個工具類,定義咱們本身的邏輯來告訴CLR咱們怎麼去遍歷這個集合。容器