使用System.Collections.Immutable与F#和Mono

时间:2014-01-31 01:35:13

标签: f# mono xamarin .net-4.5 immutability

我正在尝试使用Mono在F#中使用ImmutableDictionary。我正在使用Xamarin IDE。

我已将目标框架设置为Mono / .Net4.5,并使用内置的Nuget包管理器导入System.Collections.Immutable。

以下一行

open System.Collections.Immutable

正在生成以下两个错误

'/Users/UserName/Projects/Xamarin/OrderInfer/OrderInference/MyTest.fs(34,34): Error FS1109: A reference to the type 'System.Collections.Generic.IEnumerable'1' in assembly 'System.Runtime' was found, but the type could not be found in that assembly (FS1109) (MyTest)'

/Users/UserName/Projects/Xamarin/OrderInfer/OrderInference: Error FS1108: The type 'Lazy'2' is required here and is unavailable. You must add a reference to assembly 'System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. (FS1108) (OrderInference)

第二个错误表明我需要引用System.ComponentModel.Composition。我可以在Mono中使用它吗?如果是这样,我需要引用另一个程序集吗?

编辑: 删除了解决方案,并在下面作为答案重新发布

2 个答案:

答案 0 :(得分:2)

可以通过添加对'System.ComponentModel.Composition'的引用来解决此问题。在Xamarin的IDE中,这是通过使用“编辑引用”对话框完成的,可以通过右键单击项目中的引用来找到该对话框。转到全部标签,然后搜索System.ComponentModel,然后添加System.ComponentModel.Composition程序集。

我现在安装了以下两个程序集:

System.Collections.Immutable.dll
System.ComponentModel.Composition.dll

我的代码现在写着:

open System
open System.ComponentModel.Composition
open System.Collections.Immutable

type wordPairs = { pairs:ImmutableDictionary<string, string>; count:int} 
let myPairs = {pairs = ImmutableDictionary.Create<string, string>(); count = 0}

注意:正如gradbot所指出的那样(和Immo Landwerth后来被讨论;&gt;&gt;),ImmutableDictionary是一个 abstract 密封类。 因此,它没有公共构造函数。所以你需要使用.Create方法。

答案 1 :(得分:1)

ImmutableDictionary是抽象的,因此new不起作用。但它确实提供了许多create methods

ImmutableDictionary.Create<string, string>()