我正在尝试使用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中使用它吗?如果是这样,我需要引用另一个程序集吗?
编辑: 删除了解决方案,并在下面作为答案重新发布
答案 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>()