我需要一个可以添加的泛型集合类,并枚举。由于ICollection<T>
继承自IEnumerable<T>
,因此该类实际上只需要从ICollection<T>
继承。 BCL中是否有一个简单的泛型类只是像CollectionBase的泛型版那样继承ICollection<T>
?如果没有,那么哪个班级最接近?
我猜List<T>
这就是我一直在使用的,但我不需要顺序方面。有什么更好的(我的意思是[更小的内存占用/更快的访问/更简单])?如果它存在,袋子将是完美的。
编辑1:在我的特定实例中,我.concat
到另一个IEnumerable,查询它,然后显示结果(没有特定的顺序)。我不是想自己上课。我只需要多次制作一次性收藏品,我认为找到最好的一次性使用会很有用。因为我觉得我做了很多次类似的事情,我觉得我应该尽可能保持这个问题的通用性(没有双关语),我现在知道的更好。
编辑2:感谢大家的回答,正如@BlueRaja指出的那样,任何简单的类都会有相同的开销,因此我认为我会坚持使用我原来的使用方式List<T>
。由于它们大致相同,我的“更容易打字”的愚蠢理由,以及“我不必再带来另一种使用”并不是那么糟糕的原因。
答案 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
那样常用,而且需求量小得多。