【发布时间】:2015-01-28 19:54:16
【问题描述】:
好吧,我遇到了很多在函数签名中使用 IList 但内部使用 List 的遗留代码。
现在只有 List 和数组(int[] 实现 IList)实现 IList。 ArrayList 实现了非泛型 IList,并且由于引入了泛型,因此使用可装箱/不可装箱的集合毫无意义。
List down 仍然有一个数组实现。我认为在 C# 中使用数组没有意义了。 LinkedList 没有实现 IList
如果我回想一下 C++ STL 容器/集合,它们也没有接口。从设计的角度来看,使用什么或使其可互换是没有问题的。或者你使用了一个迭代器,如果你想要可互换的,在 C# 中你可以使用 IEnumerable 如果你想要并且可以灵活和懒惰。
我认为没有理由将其更改为数组,并且我认为我无法编写比 List 更好的集合类。
现在出于实用主义,如果我将所有 IList 替换为 List 会有多糟糕?
【问题讨论】:
-
显示一些代码。照原样,您的问题意义不大。使用接口的代码(即
IList<T>)比需要特定实现的代码(即List<T>)更灵活。那么,为什么要从更灵活的设计切换到更不灵活的设计呢?没有一个好的代码示例,就不可能理解你的场景。见stackoverflow.com/help/mcve -
你想用
ReadOnlyCollection<T>吗?您认为保持一般性会带来什么危害? -
多年来的大量讨论。这不是一个新问题,所以我不会重复历史。一些先前的讨论在这里stackoverflow.com/questions/434761/…。我同意 ArrayList(但不是 IList 因为它)不再是最佳选择。
-
确实只有少数类型在框架中直接实现了
IList<T>。但是,其中之一是Collection<T>,它用作多个框架集合的基类,例如ObservableCollection<T>,以及许多自定义集合。 -
OK 听到了您的所有顾虑并再次检查并
Collection<T>、ReadOnlyCollection<T>和ObservableCollection<T>实施IList<T>。之前有人问过,只是找不到。在我们的后端代码中,我们从未使用过任何这些,所以我想采用更统一的方法来加快开发速度。
标签: c# arrays list generics collections