從C#中的公共API返回的最佳方式是什麼?IEnumerable或返回類型的數組
數組或IEnumerable?,都在C#中或多或少具有相同的功能,如Linq操作,foreach迭代支持等。
但是哪一個更好,在什麼情況下?
從C#中的公共API返回的最佳方式是什麼?IEnumerable或返回類型的數組
數組或IEnumerable?,都在C#中或多或少具有相同的功能,如Linq操作,foreach迭代支持等。
但是哪一個更好,在什麼情況下?
C#使它非常容易 - 所有陣列都實現了IList<T>
和IEnumerable<T>
。所以它完全取決於API的預期用法。
我一直希望參考Guidelines for Collections來獲得有關返回集合類型的推薦做法。 Arrays的使用指南也提到了這一點:
DO更喜歡在公共API中使用數組的集合。
因此,我們有:
如果你要允許訪問到元素的索引,然後返回IList<T>
。這或多或少意味着你的元素是按照固定的順序。
如果您只想進行基於迭代的訪問,則可以返回IEnumerable<T>
。這不允許通過索引進行訪問,並且對元素順序不作任何保證。
另一方面,IList會暗示有些人可以通過允許添加和刪除操作來收集集合是可變的。在嘗試添加或刪除IList中的項目之前,您會檢查IsFixedSize和IsReadOnly嗎? –
@LarsGyrupBrinkNielsen對於該用例,根據您的預期合同,您有'IImmutableList
可能重複的[效率是否值得返回IEnumerable而不是List?](http://stackoverflow.com/questions/20221151/is-the-lost-of-efficiency-worth-returning- ienumerable-instead-of-list) – GSerg
@GSerg此問題具有明確定義的答案,由Microsoft的C#編碼準則支持。這似乎不符合「基於意見」的要求。此外,該鏈接回答了一個稍有不同的問題。 – metacubed
@metacubed我沒有投票結果爲基於意見。由於關閉系統的工作原理,我被列爲這樣(不幸的是)。 – GSerg