【发布时间】:2013-02-01 16:15:25
【问题描述】:
我正在寻找一个只读通用集合库,它是与.NET v3.5 兼容的常见System.Collections.Generic; 集合的.NET 版本的镜像(或者更确切地说是实现或扩展)。
我猜 F# 可能有一些只读集合(但我不确定它们是否实现了 System.Collections.Generic 的接口)。除此之外,我宁愿不在服务器上安装 F#。我想我可以简单地部署 F# dll,如果可行的话,我怀疑是这样。
是否存在实现 System.Collections.Generic 中的接口并提供相同性能(或更好)特性的只读泛型集合类库?例如,IList 的随机访问数组支持的实现(只读)。
【问题讨论】:
-
该命名空间中大多数集合的只读接口是在 4.5 中添加的。该集合不是不可变的,但您可以向其他人提供只读视图。如果集合仅通过这种视图公开,则它实际上是不可变的;出于所有意图和目的。
-
您可以像部署任何其他程序集一样部署 F# 程序集——因此,如果您想在 C# 应用程序中使用
FSharp.Core中的不可变集合类型,只需添加对它的引用并将其标记为“复制”本地”。 -
现有 System.Collections.Generic 接口中定义的大部分方法对于不可变集合来说是无用的。例如,从
IList<T>接口,您不能实现 set_Item、Add、Clear、Insert、Remove 或 RemoveAt。在不可变集合上实现这些接口在某些情况下可能会很方便,但在大多数情况下会要求抛出异常。因此,F# 集合实现的唯一 System.Collections.Generic 接口是IEnumerable<T>
标签: c# collections f#