为什么IList <T>没有提供List <T>的所有方法?我应该使用哪个?

Mar*_*tin 7 .net c# generics interface

我一直被告知对接口的编程更好,所以我的方法的参数我会设置IList<T>而不是List<T>..

但这意味着我必须施展才能List<T>使用某些方法,Find例如,我想到了一个方法.

为什么是这样?我应该继续针对接口进行编程,还是继续进行转换或还原?

我有点困惑为什么Find(例如)没有继承自IList<T>哪些List<T>.

Jon*_*eet 12

我个人使用IList<T>,而不是List<T>,但随后使用LINQ( Select,Where等),而不是特定列表的方法.

铸造于List<T>消除多使用点的IList<T>摆在首位-实际上使它更加危险,因为实施可能是一些其他的不是List<T>在执行时间.


Dar*_*rov 6

对于列表,您可以继续对接口进行编程,并使用LINQ过滤对象.您甚至可以使用IEnumerable<T>对象层次结构中更高的值.

但更一般地说,如果您的API的消费者需要调用特定方法,您可能没有选择适当的接口来公开.