【发布时间】:2009-06-21 11:21:18
【问题描述】:
老问题
我的理解是 C# 在某种意义上具有 HashSet 和 set 类型。我明白HashSet 是什么。但是为什么set 是一个单独的词呢?为什么不是每个集合都是HashSet<Object>?
新问题
为什么C#没有泛型Set类型,类似于Dictionary类型?从我的角度来看,我想要一个具有标准查找/添加/删除性能的集合。我不太关心它是用哈希还是其他东西实现的。那么为什么不创建一个在这个版本的 C# 中实际实现为 HashSet 但在未来版本中可能会有所不同的集合类呢?
或者为什么不至少接口ISet?
回答
感谢以下回答的所有人:ICollection 实现了很多您对ISet 的期望。不过,从我的角度来看,ICollection 实现了IEnumerable,而集合不必是可枚举的——例如:1 到 2 之间的实数集合(甚至可以动态生成集合)。我同意这是一个小小的抱怨,因为“普通程序员”很少需要不可数的集合。
好的,我想我明白了。 HashSet 绝对应该被称为Set,但Set 这个词在某种意义上是保留的。更具体地说,.NET 架构的创建者希望为不同的语言提供一致的类集(原文如此!)。这意味着标准类的每个名称都不能与 .NET 语言中的任何关键字重合。然而,Set 这个词在 VB.NET 中使用,它实际上是不区分大小写的(是吗?)所以不幸的是那里没有回旋余地。
谜团解开了:)
结语
Alex Y. 的新答案链接到 MSDN page,它描述了即将到来的 .NET 4.0 接口 ISet,它的行为与我认为的差不多,并由 HashedSet 实现.好结局。
【问题讨论】: