我发现.Net中有一堆不可变的集合
F# 是一种专注于不可变性的语言,它有自己的不可变数据类型。有趣的是,我在 F# 的任何阅读中都没有看到对上述不可变集合的引用。
我想知道这些不可变集合和 F# 集合之间是否有任何关系?有什么指南可以使用吗?F# Map<_,_>
和ImmutableDictionary(TKey, TValue)
哪个更好?
更新 也许我可以这样问:是否有人在同一项目中使用这些库或比较过他们的生产力?或者就像那样 - 首先用于 C#,后者用于 F#,仅此而已?
这种重复的原因很简单,System.Collections.Immutable
是最近添加的,旨在用于 C#,因此可以理解的是,它的设计者不希望人们必须引用FSharp.Core.dll
。
至于在两者之间进行选择,我将在 C# 代码和打算从 C# 使用的 F# 代码中使用System.Collections.Immutable
,并在所有其他 F# 代码中使用Microsoft.FSharp.Collections
。AFAIK在性能方面没有显着差异。典型的代码看起来像是使用 S.C.I 的链式方法调用和使用 M.F.C 的一系列|>
调用,但这实际上只是语法上的区别——从概念上讲,它们是一回事。
只是为了添加我的 2 美分:我目前的研究给人的印象是,System.Collections.Immutable
应该有助于在编写 C# 时编写 F# ))
这是关于它们的 MSDN 博客文章。它引用了另一篇文章(MSDN也是)。在本文中,有一个对 T4 模板的损坏引用,该模板可用于在 C# 中轻松创建不可变对象:这是一个 TT 文件,这是一个可怕的转换结果。
这显然是一项伟大的工作,但它似乎重现了(通过使用System.Collections.Immutable
)F#中已经自然存在的功能。
因此,目前的答案似乎是 - System.Collections.Immutable
用于 C#,Microsoft.FSharp.Collections
用于 F#,仅此而已。