我收到以下运行时异常:
System.TypeLoadException未处理
Message = Method在类型[...]上的'Specialize'试图隐式覆盖具有较弱类型参数约束的方法。
这个内在函数似乎是问题所在:
let getKey (r: IDictionary<_,_>) =
match r.TryGetValue(keyCol.Name) with
| true, k when not (isNull k) -> Some k
| _ -> None
签名为IDictionary<string,'a> -> 'a option (requires 'a : null)
。约束从isNull
传播。
查看ILSpy,getKey
被编译为覆盖FSharpTypeFunc
的{{1}}子类型。
这是一个错误吗?我可以通过在Specialize<T>()
的调用中装箱k
来解决此问题,从而删除约束。
isNull
这是Visual Studio 2008中的一个控制台应用程序,面向.NET 4.0。奇怪的是,代码在FSI中有效。
这是程序集的PEVerify输出:
[token 0x02000004]类型加载失败。
[IL]:错误:[D:\ TEST \ bin \ Debug \ TEST.exe:Test + test @ 10 [a] :: GenerateNext] [mdToken = 0x6000012] [offset 0x00000031]无法解析令牌。
2错误验证D:\ TEST \ bin \ Debug \ TEST.exe
答案 0 :(得分:1)
将其发送给fsbugs并收到一条已修复的回复。