FSharpTypeFunc.Specialize导致TypeLoadException

时间:2012-06-06 20:54:40

标签: exception f#

我收到以下运行时异常:

  

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

1 个答案:

答案 0 :(得分:1)

将其发送给fsbugs并收到一条已修复的回复。