F#中的Nullablle <>和"null"

Per*_*ako 5 f#

我在FNA的XNA框架中调用接受Nullable值的函数.现在,在C#中,你只需要调用:

foo(arg1, arg2, null, arg4)
Run Code Online (Sandbox Code Playgroud)

现在,我在F#中尝试过,但它不喜欢它.它说:"错误9类型约束不匹配.类型'a与类型System.Nullable不兼容类型'System.Nullable'没有'null'作为适当的值."

我理解为什么会发生这种情况,但它看起来真的很不方便.我现在所做的就是,为了让生活更轻松,而不是(Nullable<Rectangle>)null每次调用函数时重复键入,我只是这样做let nullRect = (Nullable<Rectangle>)null,并使用nullRect.这看起来真的很愚蠢,特别是因为我必须为我与之交互的每个可空类型执行此操作.是否有更好,更惯用的方式来处理这个问题?

kvb*_*kvb 3

这就是我要做的:

[<GeneralizableValue>]
let nl<'a when 'a : struct
           and 'a : (new : unit -> 'a)
           and 'a :> System.ValueType> : System.Nullable<'a> =
  unbox null
Run Code Online (Sandbox Code Playgroud)

nl现在您可以在以前使用过的任何地方使用null

编辑

正如托马斯指出的,这可以更简洁地写为:

let nl = System.Nullable<_>()
Run Code Online (Sandbox Code Playgroud)