在fsx文件中使用以下代码时,出现错误The type seq<'a> is not compatible with the type Collections.Generic.IEnumerable<'a>
。
module ReadOnly =
let private asList<'a> (en:System.Collections.Generic.IEnumerable<'a>) : System.Collections.Generic.IList<'a> =
new System.Collections.Generic.List<'a>(en) :> System.Collections.Generic.IList<'a>
let private asReadOnly<'a> (en:System.Collections.Generic.IEnumerable<'a>) =
new System.Collections.ObjectModel.ReadOnlyCollection<'a>(asList(en))
let ofSeq<'a> (ss: 'a seq) = asReadOnly<'a>(ss) // <-- ERROR IS HERE ON ARGUMENT 'ss'
在netcoreapp2.1
控制台应用程序中使用相同的代码时,一切都很好。
我的paket.dependencies
包含以下内容:
source https://www.nuget.org/api/v2
nuget NETStandard.Library
nuget canopy
我加载了以下内容:
#r "packages/NETStandard.Library/build/netstandard2.0/ref/netstandard.dll"
#r "packages/Selenium.WebDriver/lib/netstandard2.0/WebDriver.dll"
#r "packages/canopy/lib/netstandard2.0/canopy.dll"
注意:由于没有找到
的问题,我包括了netstandard2.0Object
答案 0 :(得分:1)
是否有理由不使用List<'T>
的方法AsReadOnly()
?
let ofSeq<'a> (ss: 'a seq) = (ResizeArray ss).AsReadOnly()
// val ofSeq :
// ss:seq<'a> -> System.Collections.ObjectModel.ReadOnlyCollection<'a>
答案 1 :(得分:1)
我没有完整的答案,但这是我发现的。 回顾一下:
NETStandard.Library
错误seq<'a> is not compatible
。NETStandard.Library
的错误'Object' is required
显示但是,在选项2中,在我的测试中,代码实际上是在用FSI调用时运行的。 这意味着错误是Intellisense模块中的库冲突。
在我的测试中,当使用选项--noframework
并引用以下两个选项之一时,脚本也会运行:
packages/FSharp.Core/lib/net45/FSharp.Core.dll
packages/FSharp.Core/lib/netstandard1.6/FSharp.Core.dll
...尽管仅适用于4.3.4版,但不适用于4.5.0版
编辑
一种可能的解决方案是向本地GAC netstandard.dll
添加显式引用,如下所示:
#r @"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll"
这似乎解决了Intellisense的问题