4

我需要一个可以添加和枚举的通用集合类。由于ICollection<T>继承自IEnumerable<T>,该类实际上只需要继承自ICollection<T>。BCL 中是否有一个简单的泛型类,它ICollection<T>像 CollectionBase 的泛型版本一样继承?如果不是,那么哪个类最接近?

我猜List<T>这是我一直在使用的,但我不需要顺序方面。有什么更好的(我的意思是[更小的内存占用/更快的访问/更简单])?如果它存在,包将是完美的。

编辑 1:在我的特定实例中,我正在.concat访问另一个 IEnumerable,对其进行查询,然后显示结果(没有特定顺序)。我不是想自己上课。我只需要多次制作一次性收藏品,我认为找到最好的一次性用品会很有用。因为我觉得我已经做过很多次类似的事情,所以我觉得我应该尽可能地保持这个问题的通用性(不是双关语),我现在知道得更好了。

编辑2:感谢大家的回答,正如@BlueRaja 指出的那样,任何简单的类都会有大致相同的开销,因此我想我会坚持我原来的使用方式List<T>。由于它们都差不多,我的“打字更容易”和“我不必再引入另一个用途”的愚蠢理由并不是那么糟糕的理由。

4

5 回答 5

2

[更小的内存占用/更快的访问/更简单]

它们都将具有几乎相同的内存占用,如果您使用 ICollection,则界面不会改变。

真正重要的是哪个最适合您需要的操作:链接列表可以更好地附加/删除(头/尾元素),而基于数组的列表具有随机访问。还有其他结构 - 您应该使用哪种结构取决于您的应用程序。

于 2010-05-04T01:52:13.223 回答
1

您可能会想要调查Collection<T>. 正如文档所示,它是为明确的子类目的而设计的:

提供泛型集合的基类。

话虽如此,任何收藏都很好;我继承自List<T>Stack<T>依此类推;选择最接近您实际需要的功能的那个。

于 2010-05-04T01:39:00.843 回答
1

更小更快都取决于您到底在做什么以及您的需求是什么。我可能推荐的唯一其他类是LinkedList<>which implements ICollection<>

于 2010-05-04T01:39:22.110 回答
0

您可以使用Reflector检查 .NET FCL 并查看哪些类使用该集合。(有一个搜索功能可以按 F3 启动。)

您还可以查看C5 库,看看是否已经实现了满足您需求的集合。查看C5 手册的第 13 页以了解集合接口层次结构。

于 2010-05-04T01:45:04.687 回答
0

CollectionBase存在主要是为了提供一种简单的机制来创建类型化的集合。使用泛型,所有集合现在都是类型化的。过去使用的扩展的绝大多数情况CollectionBase现在应该使用任何内置集合,例如List<>or LinkedList<>

Collection<>对于那些出于类型以外的原因(即添加时的额外验证或某些非标准逻辑)而需要提供自定义集合的人仍然存在。 Collection<>几乎不像以前那样常用,CollectionBase而且服务的需求要小得多。

于 2010-05-04T03:19:14.990 回答