我们有一个Web项目,它在名为“Bll.dll”的类库项目中包含其业务方法
Bll.dll的一些方法返回List<> ...
从一个来源 - 我现在不记得 - 告诉返回收集<>比返回List<>
更好
是否有效?
请注意,我不对BLL方法返回的值进行任何处理..只需在网页中查看
答案 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。
答案 4 :(得分:0)
最好的办法是公开像CustomerCollection这样的强类型类。这样你就可以在以后添加属性和方法了。
你不应该暴露一个List,但我个人认为没有问题。