如果您想要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>
?
[如果您从开销的角度来看,我认为最好的选择是两者之间的中介ISet<T>
及其实现ISet<T>
。
Set通常被忽略,但是由于不依赖于键,因为它们不关心顺序,因此在确定“所有权”和节省空间方面非常有效。
[重要的区别是HashSet<T>
,Add()
和Remove()
都变为o(1)(相对于Contains()
的典型o(n)成本。
如果订购成为问题,也有IList<T>
。
简短的回答是,您可以只将IList用于列表。但是,在某些情况下,您需要使用IEnumerable实例。如果使用ICollection或IList,则因为IList是ICollection的子接口,而ICollection是IEnumerable的子接口。
有关详细信息,请参见SortedSet<T>
。
干杯,