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