1. 程式人生 > >可以使用foreach遍歷循環的條件

可以使用foreach遍歷循環的條件

log 接口 logs 處理 語句 買衣服 foreach遍歷 程序 tle

大話C#中能使用foreach的集合的實現

轉自: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接口的類!!!!

可以使用foreach遍歷循環的條件