关于c#:返回List< T>

Is returning List<T> from method differ in performance from returning Collection<T>?

我们有一个Web项目,它在名为"bll.dll"的类库项目中包含其业务方法。bll.dll的一些方法返回list<>…从一个消息来源——我现在不记得了——告诉我们返回集合<>比返回列表<>这是有效的吗?注意,我不会对从BLL方法返回的值进行任何处理。只需在网页中查看即可


实现Collection,IIRC作为IList的包装,默认实现为List。因此,一个Collection比一个List至少有一个抽象,但一般来说,这不会是一个瓶颈。实际上,您可以考虑退回IList

编辑:这里是Collection的构造函数,由reflector提供:

1
2
3
4
public Collection()
{
    this.items = new List<T>();
}

因此,这确实包含了一个抽象层。另一方面,您可以通过将Collection子类化来添加自己的验证等(这在直接使用List或通过子类化时是不可能的,因为没有有趣的virtual方法)。

另一个需要考虑的是,它们在"o"方面具有相同的总体性能(假设您使用默认的List实现)。索引器查找将是O(1)


实际上,您应该只返回满足您在设计API时设置的目标的接口。例如,如果您只希望客户机迭代一个集合,那么返回IEnumerable。关于你的具体问题,我觉得ICollection有点无用,因为它缺少索引器。


最好的做法是公开像CustomerCollection这样的强类型类。这样,以后您就可以添加属性和方法了。

正式地说,你不应该公开一个清单,但我个人认为它没有问题。


返回列表的问题是调用方可以修改它。如果您希望连接一些通知机制("每当调用者向其添加新对象时通知被调用者"),则不能将列表视为死胡同。

返回集合/ICollection允许您创建具有所需内容的自己的实现。

基本上,一个列表意味着你被困在一个你无法逃脱的角落,没有一个突破性的改变。

因此,collection/icolection/ilist更可取。

请看这个问题和这篇文章。


更好的方法可能不适用于性能,而只适用于返回类型的类型。

在这种情况下,要说什么更好并不容易,在我看来,依赖于方法"localy"的使用,更适合于返回我们操作的类型。