IEnumerator,IEnumerable,IEnumerableT
生活随笔
收集整理的這篇文章主要介紹了
IEnumerator,IEnumerable,IEnumerableT
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1?接口IEnumerator,IEnumerable區別IEnumerable是一個聲明式的接口,聲明實現該接口的類就是“可迭代的enumerable”,但并沒用說明如?何實現迭代器(iterator).其代碼實現為:public?interface?IEnumerable{IEnumerator?GetEnumerator();}而IEnumerator接口是實現式接口,它聲明實現該接口的類就可以作為一個迭代器iterator.其代碼實現為:????????public?interface?IEnumerator{object?Current?{?get;?}bool?MoveNext();void?Reset();}
所以一個collection要支持Foreach進行遍歷,就必須實現IEnumerable,并一某種方式返回迭代器對象:IEnumerator
2?IEnumerable,IEnumerable<T>區別
我們可以看一段代碼:
public?interface?IEnumerable<out?T>:IEnumerable
{IEnumerator<T>?GetEnumerator();
}
從上面代碼可以很清楚知道IEnumerable<T>是IEnumerable接口的泛型版本。
使用泛型,不會強行對值類型進行裝箱和拆箱,或引用類型進行向下強制類型轉換,使程序性能提高。泛型定義的變量有類型限制,所以泛型提高了程序的類型安全并且提高了代碼的重用性。
比如我們常見的IList??????IList<T>繼承自ICollection<T>,ICollection<T>繼承自IEnumerable<T>,IEnumerable<T>繼承自IEnumerable,所以List<T>實現了IEnumerable<T>接口,也就是實現了IEnumerable接口
所以可以經常看到這樣的代碼?:public?static?IEnumerable<T>?Filter<T>(IEnumerable<T>?ObjectList)???{???List<T>?ResultList?=?new?List<T>();???..............return?ResultList;????}
轉載于:https://blog.51cto.com/tangqiongqi/1424995
總結
以上是生活随笔為你收集整理的IEnumerator,IEnumerable,IEnumerableT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何遍历当前进程中的AppDomain
- 下一篇: 通解DNS(下)