方法/构造函数中的集合参数?

时间:2013-07-04 08:17:51

标签: c# .net

当某个方法/构造函数接受集合参数时,参数类型是否应该在大多数情况下用作IEnumerable?如果是这样,该方法是否应该创建一个新的List(.ToList())来将引用存储在私有变量或方法范围的局部变量中,而不是将变量存储在IEnumerable类型变量中?

请告诉我。

3 个答案:

答案 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,如果您想要通过AddRemove元素更新集合,则应该转换为集合类型这允许你做这些动作