Microsoft.FSharp.Collections与System.Collections.Immutable

时间:2014-01-15 11:34:44

标签: .net collections f# immutability

我重新发现在.Net

中有一堆immutable collections

F#是一种专注于不变性的语言,它有自己的immutable data types。有趣的是,在F#的任何阅读中我都没有看到上述不可变集合的引用。

我想知道那些不可变集合和F#集合之间是否有任何关系?有什么指导方针可以使用吗?什么是更好的,F#Map<_,_>ImmutableDictionary(TKey, TValue)等等?

更新也许我可以问如下:有没有人在同一个项目中使用这两个库或者比较过他们的工作效率?或者就是这样 - 首先是C#而后者是F#,那就是它?

2 个答案:

答案 0 :(得分:6)

这种重复的原因很简单,System.Collections.Immutable是最近添加的,并且打算在C#中使用,因此其设计人员可以理解地不希望人们必须引用FSharp.Core.dll

至于在两者之间进行选择,我会在C#代码中使用System.Collections.Immutable,在C#中使用F#代码,在所有其他F#代码中使用Microsoft.FSharp.Collections。 AFAIK在性能方面没有显着差异。典型的代码看起来像S.C.I的链式方法调用和M.F.C的一系列|>调用,但这实际上只是一个语法差异 - 概念上它是相同的。

答案 1 :(得分:3)

只是加上我的2美分:我目前的研究给人的印象是System.Collections.Immutable在你编程C#时应该有助于编程F#))

这是MSDN blog post。它引用了another post(也是MSDN)。在本文中,有一个对T4模板的破坏引用,它可用于在C#中轻松创建不可变对象:这里是TT file,这里是变换的scary result

这显然是一项伟大的工作,但似乎可以重现(通过使用System.Collections.Immutable)F#中已经存在且自然存在的功能。

因此,答案目前似乎是 - System.Collections.Immutable用于C#而Microsoft.FSharp.Collections用于F#,就是这样。