1

哪种方式更习惯使用 Nullable<'a> 或使用 Option<'a> 来表示可为空的 int?

4

2 回答 2

5

正如约翰所说,Option<T>在 F# 中绝对是更惯用的类型。我当然会使用选项作为我的默认选择——该Option模块提供了许多有用的功能,模式匹配在选项上工作得很好,而且 F# 库通常设计为与选项一起使用。

也就是说,有两种情况您可能想要使用可为空的:

  • 创建可选值数组时 -Nullable<T>是一种值类型(某种),如果创建数组Nullable<T>[],则将其分配为连续内存块。另一方面,选项是引用类型,option<T>[]将是堆分配对象的引用数组。

  • 当您需要编写一些计算并传播缺失值时 - 在 F# 3.0 中,有一个模块Microsoft.FSharp.Linq.NullableOperators可以实现各种运算符来处理可空值(请参阅MSDN 文档),它可以让您编写例如:

    let one = Nullable(1)
    let two = Nullable(2)
    
    // Add constant to nullable, then compare value of two nullables
    (one ?+ 2) ?>=? two
    
于 2013-10-02T03:28:45.980 回答
5

Option 在 F# 代码中更为惯用。

它在使用时具有更好的语法,match并得到标准库的大量支持。

但是,如果您打算从 C# 或其他语言访问代码,您可能应该公开Nullable在 C# 中更易于使用的接口。

于 2013-10-02T03:22:55.807 回答