从方法返回List <t>与返回Collection <t>?</t> </t>的性能不同

时间:2010-07-18 22:36:03

标签: c# asp.net list collections

我们有一个Web项目,它在名为“Bll.dll”的类库项目中包含其业务方法 Bll.dll的一些方法返回List&lt;&gt; ...
从一个来源 - 我现在不记得 - 告诉返回收集&lt;&gt;比返回List&lt;&gt;
更好 是否有效?
请注意,我不对BLL方法返回的值进行任何处理..只需在网页中查看

即可

5 个答案:

答案 0 :(得分:4)

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

编辑:这里是Collection<T>的构造函数,由反射器提供:

public Collection()
{
    this.items = new List<T>();
}
事实上,这包含了一层抽象。 plus 方面是你可以通过继承Collection<T>来添加自己的验证等(这在直接或通过子类化使用List<T>时是不可能的,因为没有兴趣virtual方法)。

要考虑的另一件事是,它们在“O”方面具有相同的整体性能(假设您使用默认的List<T>实现)。索引器查找将是O(1)

答案 1 :(得分:2)

您真的应该只返回符合您在设计API时设置的目标的界面。例如,如果您只希望客户遍历集合,则返回IEnumerable<T>。至于你的具体问题,我觉得ICollection<T>没有用,因为它没有索引器。

答案 2 :(得分:0)

最好可能不适用于性能,但仅适用于返回类型的类型。

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

答案 3 :(得分:0)

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

返回Collection / ICollection允许您创建自己的实现,其中包含您想要的任何内容。

基本上,一个名单意味着你被困在一个角落里,你无法在没有突破性变化的情况下逃脱。

所以最好使用Collection / ICollection / IList。

请参阅this questionthis article

答案 4 :(得分:0)

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

你不应该暴露一个List,但我个人认为没有问题。