我重新发现在.Net
中有一堆immutable collectionsF#是一种专注于不变性的语言,它有自己的immutable data types。有趣的是,在F#的任何阅读中我都没有看到上述不可变集合的引用。
我想知道那些不可变集合和F#集合之间是否有任何关系?有什么指导方针可以使用吗?什么是更好的,F#Map<_,_>
或ImmutableDictionary(TKey, TValue)
等等?
更新也许我可以问如下:有没有人在同一个项目中使用这两个库或者比较过他们的工作效率?或者就是这样 - 首先是C#而后者是F#,那就是它?
答案 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#,就是这样。