1

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

请告诉我。

4

3 回答 3

4

参数类型应该在大多数情况下用作 IEnumerable 吗?

如果你真的是这个意思IEnumerable<T>,那么是的。除非类型需要更丰富的东西,否则您可以使用扩展的接口之一IEnumerable<T>

您应该避免使用非泛型接口和集合(命名空间System.Collections),而使用泛型接口和集合(命名空间System.Collections.Generic)。

如果是这样,该方法是否应该创建一个新的 List (.ToList()) 以将引用存储在私有变量或方法范围的局部变量中,而不是将变量存储在 IEnumerable 类型变量中?

可能是的。

答案取决于您的类型的语义。如果定义为持有对集合的引用,则不要复制它(例如ContactPerson,一个中的多个Organisation可能都Interaction与该组织共享列表)。在其他情况下,新对象将拥有该集合,那么它应该制作一个副本。

于 2013-07-04T08:23:03.853 回答
0

我会说你应该以某种方式使用它,这可以确保你只对集合进行一次迭代。

因此,如果您只是使用简单foreach IEnumerable是可以的,但如果您想制作更复杂的东西,您应该将其存储在本地(使用或类似的) ToList()ToArray()而不是使用该局部变量而不是一遍又一遍地迭代源集合。

于 2013-07-04T08:22:43.983 回答
0

如果您打算只用于 Read-use IEnumerable,如果您想更新集合, by AddRemove元素,您应该转换为允许您执行这些操作的集合类型

于 2013-07-04T08:23:59.567 回答