它是一個很好的做法,用IEnumerable
應用範圍時,你並不需要真正添加或刪除的東西,但只是列舉出來?的IEnumerable和良好做法(WCF)
側面問題:您是否曾經從WCF服務返回IEnumerable<T>
有任何問題?這會給客戶端應用程序帶來問題嗎?畢竟,我認爲這將被序列化爲一個數組。
它是一個很好的做法,用IEnumerable
應用範圍時,你並不需要真正添加或刪除的東西,但只是列舉出來?的IEnumerable和良好做法(WCF)
側面問題:您是否曾經從WCF服務返回IEnumerable<T>
有任何問題?這會給客戶端應用程序帶來問題嗎?畢竟,我認爲這將被序列化爲一個數組。
我沒有任何Good Practices源代碼,但我經常傾向於依賴List來收集我的集合,它實現IEnumerable,但我將它作爲List傳遞,而不是IEnumerable,如果我需要它被讀取只有我寧願通過ReadOnlyCollection ..
我不喜歡返回或接受IList<T>
或List<T>
,因爲它們暗示修改集合的能力。
所以更願意將T[]
作爲固定大小的集合返回。此外,陣列可以輕鬆映射到任何其他框架,平臺等。
並傾向於接受IEnumerable<T>
以強調方法將枚舉該集合。
T []不是隻讀集合:您可以修改數組的元素。相反,IList
@Joe:你說得對。不是隻讀的。只是固定大小。 – abatishchev
我傾向於只返回IEnumerable<T>
,當我想暗示調用者實現可能會使用懶惰評估。否則,如果結果是隻讀的,我通常會返回IList<T>
或ICollection<T>
,並將其作爲ReadOnlyCollection<T>
執行。
懶惰評估可能是一個重要的考慮因素:如果您的實現可以拋出異常,則在調用者開始枚舉結果之前不會拋出該異常。通過返回IList<T>
或ICollection<T>
,您可以保證在調用方法時拋出任何異常。
對於WCF方法,從使用延遲評估的方法返回IEnumerable<T>
意味着任何異常可能不會被拋出,直到您的響應被序列化爲止 - 這樣您就不太可能在服務器端處理它。
也許你應該添加你正在談論的語言?這不是一個.net專用的網站,畢竟... –
你是對的。謝謝。 – User
雖然這是**不是一個完全重複**,我仍然建議你看看這個問題: http://stackoverflow.com/questions/1072614/should-i-always-return-ienumerablet-instead-of -ilistt – yas4891