程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 隨心所欲~我也做個集合遍歷器吧(自己的foreach,委托的威力)

隨心所欲~我也做個集合遍歷器吧(自己的foreach,委托的威力)

編輯:C#入門知識

感覺微軟在面向對象三大原則中,封裝性運用的最為突出,它會將一些復雜的算法,結構,功能代碼進行封裝,讓程序員在使用時十分得心應手,如關鍵字裡的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 =>

通過這篇文章,我們可以完全領略到委托的威力,呵呵。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved