當某些方法/構造函數接受一個收集參數時,大部分時間參數類型是否應該用作IEnumerable
?如果是這樣,該方法是否應該創建一個新列表(.ToList()
)以將引用存儲在私有變量或方法範圍局部變量中,而不是將該變量存儲在IEnumerable
類型變量中?方法/構造函數中的集合參數?
請讓我知道。
當某些方法/構造函數接受一個收集參數時,大部分時間參數類型是否應該用作IEnumerable
?如果是這樣,該方法是否應該創建一個新列表(.ToList()
)以將引用存儲在私有變量或方法範圍局部變量中,而不是將該變量存儲在IEnumerable
類型變量中?方法/構造函數中的集合參數?
請讓我知道。
參數類型應該在大多數情況下用作IEnumerable嗎?
如果你真的是IEnumerable<T>
然後是。除非類型需要更豐富的內容,否則您可以使用其中一個擴展IEnumerable<T>
的接口。
您應該避免使用非泛型接口和集合(名稱空間System.Collections
)替換通用接口(命名空間System.Collections.Generic
)。
如果這樣,應該在方法創建一個新的列表(.ToList())來存儲在一個專用變量或在方法中的參照範圍的局部變量,而不是存儲在IEnumerable的類型變量的變量?
可能是的。
答案取決於你的類型的語義。如果定義爲持有對該集合的引用,則不要複製它(例如,Organisation
中的多個ContactPerson
都可以與該組織共享該列表Interaction
)。在其他情況下,新對象將擁有該集合,然後它應該複製。
我想說你應該用某種方式來使用它,這會讓你確信你只會迭代一次該集合。
所以,如果你只是使用簡單foreach
IEnumerable
是好的,但如果你想做出更復雜的事情,你應該(用ToList()
,ToArray()
或類似),比使用本地變量,而不是迭代的本地存儲它一遍又一遍地重複收集源代碼。
如果你打算只使用讀 - 使用IEnumerable
,如果要更新集合,由Add
,Remove
元素,你應該轉換爲集合類型,它允許你做這些動作的
你問題太模糊了。這取決於很多背景。有時你會想複製收藏 - 有時你不會。有時'IEnumerable'就夠了 - 有時候不是。 –
有時你想保留對參數本身的引用,有時你可能更喜歡將它複製到ReadOnlyCollection或將其轉換爲IReadOnlyList ... –