感覺微軟在面向對象三大原則中,封裝性運用的最為突出,它會將一些復雜的算法,結構,功能代碼進行封裝,讓程序員在使用時十分得心應手,如關鍵字裡的foreach和labmda表達式裡的Foreach等等,今天我也來寫一個集合遍歷器得了,呵呵。
小知識:你的集合如果是List,那麼它裡面的N多方法都是可以拿來就用的,今天的遍歷功能,使用List裡的GetEnumerator()方法實現,它返回的其實是一個Enumerator結果體,這個枚舉器的結構體如下:
Enumerator : IEnumerator<T> T Current { [TargetedPatchingOptOut(
它有一個屬性Current和一個方法MoveNext,這是我們實現遍歷器的前提,Current屬性會把當前值輸出,而MoveNext會將集合指向下一個元素,它的返回值為bool類型,true表示有下一個元素,false表示集合已經被遍歷完了。
有了上面的知識,我們再配合委托Action<T>,就可以設計一個自己的foreach方法了,呵呵
ForeachZzl<T>(IList<T> list, Action<T> e =
調用這個方法也很簡單,由於使用了委托,所以,只要保正你有一個輸入參數T,就可以運用到所有方法體上了
List<> enums = List<> { , , , , =>
怎麼樣,是不是有點向微軟自己的Foreach這個lambda呀,呵呵,其實我們加個擴展方法,它就變成了lambda了,看代碼
ForeachZzl<T>( IList<T> list, Action<T> e =
下面這種形式的調用是不是就很熟悉了,呵呵
enums.ForeachZzl(i =>
通過這篇文章,我們可以完全領略到委托的威力,呵呵。