2013-11-23 72 views

回答

66
  • IEnumerable<T>是以下擴展或實現的基礎接口。它不允許直接訪問並且是隻讀的。所以只有在你打算遍歷集合時才使用它。

  • ICollection<T> extend IEnumerable<T>此外還允許添加,刪除,測試集合中是否存在元素並獲取元素的總數。它不允許通過索引直接訪問元素。這將是一個O(n)操作,因爲您需要開始遍歷它直到找到相應的元素。

  • IList<T>延伸ICollection<T>(因此它繼承了它的所有屬性),但另外允許通過索引直接訪問元素。這是一個O(1)操作。

  • List<T>只是IList<T>接口的具體實現。

在您的代碼中,您應該始終公開對象層次結構中對應於調用者需求的最高類型。因此,例如,如果調用者只會枚舉數據集,請使用IEnumerable<T>。如果他們需要通過索引直接訪問元素,則會暴露IList<T>

List<T>只應在您的代碼內部使用,但通常不會出現在您公開的方法的簽名中。這給你更多的靈活性,因爲你可以很容易地交換具體的實現而不會違約。

+0

謝謝,很明顯。對於響應時間,當我嘗試查找元素或對集合進行排序時,它們中最好的是什麼? –

+5

使用LINQ你可以通過'IEnumerable '來實現。 –

+0

這是一個很好的資源,Hashset適合它嗎? – Evonet