当某个方法/构造函数接受集合参数时,参数类型是否应该在大多数情况下用作IEnumerable
?如果是这样,该方法是否应该创建一个新的List(.ToList()
)来将引用存储在私有变量或方法范围的局部变量中,而不是将变量存储在IEnumerable
类型变量中?
请告诉我。
答案 0 :(得分:4)
参数类型应该在大多数时候用作IEnumerable吗?
如果你的意思是IEnumerable<T>
那么是。除非类型需要更丰富的内容,否则您可以使用扩展IEnumerable<T>
的接口之一。
您应该避免使用非泛型接口和集合(名称空间System.Collections
)来支持通用接口和名称空间(名称空间System.Collections.Generic
)。
如果是这样,该方法是否应该创建一个新的List(.ToList())来将引用存储在私有变量或方法范围的局部变量中,而不是将变量存储在IEnumerable类型变量中?
可能是的。
答案取决于您的类型的语义。如果定义为持有对集合的引用,则不要复制它(例如,ContactPerson
中的多个Organisation
可能与该组织共享Interaction
的列表。在新对象拥有该集合的其他情况下,它应该复制。
答案 1 :(得分:0)
我会说你应该以某种方式使用它,这样你就可以确保只对集合进行一次迭代。
因此,如果您只是使用简单的foreach
IEnumerable
即可,但如果您想制作更复杂的内容,则应将其存储在本地(使用ToList()
,{{ 1}}或类似的)而不是使用该局部变量而不是一遍又一遍地迭代源集合。
答案 2 :(得分:0)
如果您打算仅用于读取 - 使用IEnumerable
,如果您想要通过Add
,Remove
元素更新集合,则应该转换为集合类型这允许你做这些动作