轉自:http://www.cnblogs.com/tangzhengyue/p/3339936.html
大家都知道foreach的語法: foreach(var item in items) { Console.Writeln(item); }
通過這樣一個簡單的語句,就能實現遍歷集合items中的所有元素。 那么,集合類(注意不是集合中的元素的類)是要滿足什么條件才能用foreach遍歷呢?
就像買衣服需要去找到賣衣服的人一樣,要使用foreach,集合類必須要實現GetEnumerator()方法。
這里的GetEnumerator就相當於商城里的售貨員,穿着統一的服裝,任務就是買衣服(程序里的任務是實現遍歷集合)。
當然了,售貨員可以是個體戶,也就是說,你可以自己直接實現GetEnumerator()方法;也可以是某個公司統一培訓上崗的(程序里就是 實現了IEnumerable接口的。)只要是這個公司培訓上崗的員工,一定是能夠賣衣服。同理,只要實現了IEnumerable接口,就一定能夠用 foreach遍歷! 那么,實現了IEnumerable接口必然要重寫GetEnumerator()方法。GetEnumerator()方法就讓這個集合類獲得了遍歷的方法。 而這個遍歷的方法是有一定的共性的,比如,獲取當前索引對應的元素(GetCurrent)啦, 移動到下一個元素啦(MoveNext)啦,等等等等。 就好比買衣服培訓一樣,有一套統一的流程,大家賣衣服的流程都差不多(進貨、上貨、叫賣等等)。 既然這么有共性,那么就給封裝成一個IEnumerator接口吧,這個接口里就包括獲取當前索引對應的元素(GetCurrent)啦, 移動到下一個 元素(MoveNext)等等的方法,等待你去實現。這樣,你只需要寫一個實現了IEnumerator接口的類(假設是MyArrayEnumerator),構造函數里將你要寫的集合類的 元素集合傳進去處理。那么你再在集合類的GetEnumerator()方法里寫上 return new MyArrayEnumerator()即完成了遍歷集合的“上崗培訓”。
總結就是:要使用foreach,集合類必須要實現GetEnumerator()方法,集合類是需要實現IEnumerator接口的類!!!!
