继承ICollection <t> </t>的最基本类是什么

时间:2010-05-04 01:36:30

标签: c# .net icollection

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

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

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

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

5 个答案:

答案 0 :(得分:2)

  

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

它们将具有几乎相同的内存占用,如果使用ICollection,接口将不会更改。

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

答案 1 :(得分:1)

您可能想要查看Collection<T>。它的设计用于子类化的明确目的,如文档所示:

  

提供泛型集合的基类。

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

答案 2 :(得分:1)

更小更快取决于您正在做什么以及您的需求是什么。我可能推荐的唯一一个类是LinkedList<>,它实现了ICollection<>

答案 3 :(得分:0)

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

您还可以查看C5 Library,了解是否已经实施了符合您需求的集合。查看C5 Manual的第13页,了解集合接口层次结构。

答案 4 :(得分:0)

CollectionBase主要用于提供创建类型集合的简单机制。使用Generics,现在可以输入所有集合。过去使用CollectionBase扩展程序的绝大多数情况现在都应该使用List<>LinkedList<>等任何内置集合。

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