2014-06-27 52 views
0

從C#中的公共API返回的最佳方式是什麼?IEnumerable或返回類型的數組

數組或IEnumerable?,都在C#中或多或少具有相同的功能,如Linq操作,foreach迭代支持等。

但是哪一個更好,在什麼情況下?

+0

可能重複的[效率是否值得返回IEnumerable而不是List?](http://stackoverflow.com/questions/20221151/is-the-lost-of-efficiency-worth-returning- ienumerable-instead-of-list) – GSerg

+2

@GSerg此問題具有明確定義的答案,由Microsoft的C#編碼準則支持。這似乎不符合「基於意見」的要求。此外,該鏈接回答了一個稍有不同的問題。 – metacubed

+0

@metacubed我沒有投票結果爲基於意見。由於關閉系統的工作原理,我被列爲這樣(不幸的是)。 – GSerg

回答

1

C#使它非常容易 - 所有陣列都實現了IList<T>IEnumerable<T>。所以它完全取決於API的預期用法。

我一直希望參考Guidelines for Collections來獲得有關返回集合類型的推薦做法。 Arrays的使用指南也提到了這一點:

DO更喜歡在公共API中使用數組的集合。

因此,我們有:

  • 如果你要允許訪問到元素的索引,然後返回IList<T>。這或多或少意味着你的元素是按照固定的順序。

  • 如果您只想進行基於迭代的訪問,則可以返回IEnumerable<T>。這不允許通過索引進行訪問,並且對元素順序不作任何保證。

+0

另一方面,IList會暗示有些人可以通過允許添加和刪除操作來收集集合是可變的。在嘗試添加或刪除IList中的項目之前,您會檢查IsFixedSize和IsReadOnly嗎? –

+1

@LarsGyrupBrinkNielsen對於該用例,根據您的預期合同,您有'IImmutableList ','IReadOnlyList '或'IReadOnlyCollection '。 – metacubed

相關問題