我遇到了很多使用IList<>的遗留代码。在函数签名中,但内部使用List<>。
现在只有List<>和arrays(int []实现IList<>)实现IList<>。 ArrayList实现了非泛型IList,并且由于引入了泛型,因此使用boxable / unboxable集合毫无意义。
列表与LT;> down仍然有一个数组实现。我不认为在C#中使用数组是否有意义。 链表<>没有实现IList<>
如果我回想一下C ++ STL容器/集合,他们也没有接口。从设计的角度来看,使用什么或使其可以互换是没有问题的。或者你使用了迭代器,如果你想要可以互换,在C#这里可以使用IEnumerable<>如果你想要,可以灵活和懒惰。
我认为没有理由将其更改为数组,我认为我不能写出比List<>更好的集合类。
现在出于实用主义,如果我要替换所有的IList<>与列表<>?
答案 0 :(得分:3)
现在只有List<>和arrays(int []实现IList<>)实现IList<>
不正确。
例如,如果你使用NHibernate,它有自己的IList<T>
实现,它用来表示列表,如果我没记错的话,如果在映射的实体中公开{{1}},则会抛出错误。
一般来说,暴露界面而不是代码中的实现会让事情更加灵活,因为使用您的代码的人可能希望使用List<T>
的自定义实现并强制他们使用IList<T>
当他们没有必要限制时。
答案 1 :(得分:0)
人们可以(并且确实)自己实现IList<T>
。如果您将所有IList<T>
替换为List<T>
,那么您将打破所有这些用途。
链接列表无法实现,因为它们不允许随机访问。我认为IList<T>
是一个很好的界面,并且经常使用它。