gpt4 book ai didi

.net - 为什么.NET框架中没有 "set"接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 17:59:04 26 4
gpt4 key购买 nike

我正在专门考虑泛型类 HashSet<T> .它实现了几个接口(interface),但没有一个接口(interface)暴露了一个集合的正确语义。具体来说,没有一个支持 Add方法返回 bool . ( ICollection<T> 支持 void Add ,可以在紧要关头使用。)这些接口(interface)也不支持常见的集合操作,如联合和交集。 (尽管必须说其中一些操作可以通过对 IEnumerable<T> 的扩展来使用。)

这意味着该类只能像直接实现的集合一样使用。即,你不能做这样的事情:

ISet<int> = new HashSet<int>;

反正据我所知不是。那么,是什么促使选择将其排除在外呢?

也许最重要的是:即使你可以投 HashSet<T>ICollection<T>等,您在公开的 API 中失去了语义值(value)。也就是说,您的 API 的使用者没有任何迹象表明他们正在使用一组。所以当你 可以调用 ICollection<T>.Add并且,如果他们尝试添加一个项目两次并且它不起作用,人们会感到困惑。一个固定的界面会给人们正确的期望。

最佳答案

虽然我不知道为什么它没有更早地进入基类库,但 ISet 可在 .NET 4.0 中使用,距发货仅几周时间。该接口(interface)具有您对集合所期望的大多数方法。这些是一些受支持的方法:

  • 添加、清除、包含、CopyTo、GetEnumerator、删除(继承)
  • 除了与
  • 相交
  • IsSubsetOf
  • IsSupersetOf
  • 重叠
  • UnionWith

  • HashSet SortedSet 集合实现了这个新接口(interface)。

    关于.net - 为什么.NET框架中没有 "set"接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199699/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com