【发布时间】:2015-10-08 21:36:22
【问题描述】:
我正在尝试将 obj 转换为 'T 并且在编译时收到 FS0013 错误。
我的代码有什么问题?
也许它坏了,因为我试图从 C# 中“映射”它,而这在 F# 中以完全不同的方式完成?
let myFunc (x : Option<'T>) =
match x with
None -> failwith "wtf"
| Some x -> Convert.ChangeType(x, typedefof<'T>) :> 'T
完整的错误文本:
错误 FS0013:来自类型的静态强制
obj
至'T
涉及基于此程序点之前的信息的不确定类型。某些类型不允许使用静态强制。需要更多类型注释。
更新:
这是我正在尝试编写的实际功能。 Option 的值在我没有自己的值时使用。
let ( %? ) (defaultValue : Option<'a>) (parameterName : string)
= match (environVar parameterName) with
null -> match defaultValue with
None -> failwith "No value found as well as default value is not set"
| Some defaultVal -> defaultVal
| x -> let objectResult = Convert.ChangeType(x, typedefof<'a>)
objectResult :> 'a
【问题讨论】:
标签: f#