繁体   English   中英

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

[英]What is the most basic class that inherits ICollection<T>

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

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

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

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

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

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

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

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

提供泛型集合的基类。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM