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

本文关键字:IList 是否 过时 不实用 通用 NET 接口 | 更新日期: 2023-09-27 18:32:29

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

现在只有List<>和arrays(int[]实现IList<>(实现IList<>。ArrayList 实现了非泛型 IList,并且由于引入了泛型,因此使用可装盒/不可装箱集合是没有意义的。

List<> down仍然有一个数组实现。我认为在 C# 中使用数组没有意义了。LinkedList<> 不实现 IList<>

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

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

现在出于实用主义,如果我用List<>替换所有IList<>会有多糟糕?

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

现在只有List<>和数组(int[]实现IList<>(实现IList<>

不对。

例如,如果您使用 NHibernate,它有自己的IList<T>实现,它用于表示列表,如果我没记错的话,如果您在映射实体中公开List<T>,则会引发错误。

但一般来说,公开接口而不是代码中的实现会使事情更加灵活,因为使用您的代码的人可能希望使用他们的自定义IList<T>实现,并且强制他们在不必使用时使用 List<T> 是有限制性的。


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

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

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