是.NET IList<> (通用IList接口)过时或不实用?

时间:2014-11-30 20:14:17

标签: c# arrays list generics collections

我遇到了很多使用IList<>的遗留代码。在函数签名中,但内部使用List<>。

现在只有List<>和arrays(int []实现IList<>)实现IList<>。 ArrayList实现了非泛型IList,并且由于引入了泛型,因此使用boxable / unboxable集合毫无意义。

列表与LT;> down仍然有一个数组实现。我不认为在C#中使用数组是否有意义。 链表<>没有实现IList<>

如果我回想一下C ++ STL容器/集合,他们也没有接口。从设计的角度来看,使用什么或使其可以互换是没有问题的。或者你使用了迭代器,如果你想要可以互换,在C#这里可以使用IEnumerable<>如果你想要,可以灵活和懒惰。

我认为没有理由将其更改为数组,我认为我不能写出比List<>更好的集合类。

现在出于实用主义,如果我要替换所有的IList<>与列表<>?

2 个答案:

答案 0 :(得分:3)

  

现在只有List<>和arrays(int []实现IList<>)实现IList<>

不正确。

例如,如果你使用NHibernate,它有自己的IList<T>实现,它用来表示列表,如果我没记错的话,如果在映射的实体中公开{​​{1}},则会抛出错误。

一般来说,暴露界面而不是代码中的实现会让事情更加灵活,因为使用您的代码的人可能希望使用List<T>的自定义实现并强制他们使用IList<T>当他们没有必要限制时。


使用接口而不是具体实现被认为是一种很好的做法:它是DSOLID的一个组成部分。

答案 1 :(得分:0)

人们可以(并且确实)自己实现IList<T>。如果您将所有IList<T>替换为List<T>,那么您将打破所有这些用途。

链接列表无法实现,因为它们不允许随机访问。我认为IList<T>是一个很好的界面,并且经常使用它。