为什么要使用ICollection 而不是IList ?

问题描述 投票:1回答:2

如果您想要ICollection<T>的功能,但又想要IEnumerable<T>属性,我已经读过说使用Count的文章。

然而,由于System.Linq.Enumerable中的扩展方法提供了ElementAt()之类的方法,为什么您不只使用IList<T>,因为它使用了索引器?

在我看来,ICollection<T>可以完成IList<T>所能完成的工作,只是方式更加冗长且难以理解。

在哪种情况下可读性/效率更高,更遵循SOLID原则,或者以某种方式使用ICollection<T>优于IList<T>会更好吗?

编辑:

重复的问题的答案没有回答我的问题,因为它们避免谈论ICollection<T>可以完成IList<T>可以做的事情,但是方式要丑陋得多。

如果他们都做同样的事情,为什么不只使用清洁剂IList<T>

c# list ienumerable icollection
2个回答
0
投票

[如果您从开销的角度来看,我认为最好的选择是两者之间的中介ISet<T>及其实现ISet<T>

Set通常被忽略,但是由于不依赖于键,因为它们不关心顺序,因此在确定“所有权”和节省空间方面非常有效。

[重要的区别是HashSet<T>Add()Remove()都变为o(1)(相对于Contains()的典型o(n)成本。

如果订购成为问题,也有IList<T>


0
投票

简短的回答是,您可以只将IList用于列表。但是,在某些情况下,您需要使用IEnumerable实例。如果使用ICollection或IList,则因为IList是ICollection的子接口,而ICollection是IEnumerable的子接口。

有关详细信息,请参见SortedSet<T>

干杯,

© www.soinside.com 2019 - 2024. All rights reserved.