使用Nullable<'a>的方式更为惯用。或使用选项<'a>用于表示可为空的int?
答案 0 :(得分:5)
选项在F#代码中更为惯用。
在match
中使用时,它具有更好的语法,并且具有标准库的大量支持。
但是,如果您计划从C#或其他语言访问代码,则应该使用Nullable
公开接口,这在C#中更容易使用。
答案 1 :(得分:5)
正如约翰所说,Option<T>
绝对是F#中惯用的类型。我肯定会使用选项作为我的默认选择 - Option
模块提供了许多有用的功能,模式匹配很好地适用于选项,而F#库通常用于处理选项。
那就是说,有两种情况你可能想要使用nullable:
创建可选值数组时,Nullable<T>
是值类型(排序),如果创建数组Nullable<T>[]
,则将其分配为连续内存块。另一方面,选项是引用类型,option<T>[]
将是对堆分配对象的引用数组。
当您需要编写一些计算并传播缺失值时 - 在F#3.0中,有一个模块Microsoft.FSharp.Linq.NullableOperators
,它实现了各种运算符来处理可为空的值(参见MSDN documentation)你写的是:
let one = Nullable(1)
let two = Nullable(2)
// Add constant to nullable, then compare value of two nullables
(one ?+ 2) ?>=? two