我試圖取代T[]
或List<T>
用途爲函數的參數和更適當的類型,如IEnumerable<T>
,ICollection<T>
和IList<T>
返回值。的ICollection <T>是基於非索引,但TakeWhile()存在
ICollection<T>
從我的理解是可取的IList<T>
您只需要基本/簡單的收集功能(例如枚舉和計數功能),因爲它提供了最小的限制。從這裏閱讀我認爲的主要差異之一ICollection<T>
並不要求底層集合是基於索引的,其中IList<T>
在做什麼?
在了我需要更換List<T>.GetRange()
電話,我很驚訝地發現其中有一個重載支持基於索引選擇ICollection<T>.TakeWhile()
擴展方法切換我List<T>
引用? (msdn link)
我很困惑爲什麼這個方法存在於ICollection中,這裏沒有任何索引基於這個接口?我誤解了,或者如果這個方法實際上工作,如果底層集合是例如一個Hashset或什麼的?