返回ICollection 而不是List 的真正优势是什么?

我读过几篇博文,提到对于公共API,我们应该总是返回ICollection(或IEnumerable)而不是List。 返回ICollection而不是List的真正优势是什么?

谢谢!

重复: List(T)和Collection(T)有什么区别?

枚举器在迭代时一次只返回一个实体。 这是因为它使用了收益率 。 另一方面,集合返回整个列表,要求列表完全存储在内存中。

简短的回答是,调查员更轻松,更有效率。

在选择底层数据结构时,它为您提供了更多自由。

List假定实现支持索引,但ICollection没有这样的假设。

这意味着如果您发现Set可能提供更好的性能,因为排序无关紧要,那么您可以自由地更改您的方法而不会影响客户端。

这是基本的封装。

我认为IList会更合适,但……

ICollection只是一个接口,而List是该接口的特定实现。 如果您想稍后使用除列表之外的其他容器怎么办? 如果您公开公开ICollection接口,则可以稍后将内部容器更改为其他内容 – 只要新容器也实现ICollection接口即可。

请参阅List(of T)和Collection(of T)之间的区别是什么?