F# 如何声明可为空的歧视性联合?

F# 如何声明可为空的歧视性联合?,f#,F#,我有这样一个受歧视的联盟 type foo = | Yes of bool | Number of decimal 我有另一种类型,我试图将此DS作为可空成员进行删除 type test(value) = member this.Value : Nullable<foo> = value 型式试验(数值)= 此成员。值:Nullable=Value 当我尝试这样做时,我得到了“一个泛型构造要求类型“foo”有一个公共的默认构造函数。我如何解决这个问题?.NET的Nullable

我有这样一个受歧视的联盟

type foo =
| Yes of bool
| Number of decimal
我有另一种类型,我试图将此DS作为可空成员进行删除

type test(value) =
member this.Value : Nullable<foo> = value
型式试验(数值)=
此成员。值:Nullable=Value
当我尝试这样做时,我得到了“一个泛型构造要求类型“foo”有一个公共的默认构造函数。我如何解决这个问题?

.NET的
Nullable
类型实际上是设计用来与
int
等值类型一起使用,而不是与
string
等引用类型一起使用,因为它们已经可以为null

默认情况下,区分的联合是引用类型,因为它们实际上被编译为类。但是,它们可以强制为结构,这将使其成为值类型。但是,当您这样做时,会出现另一个错误:
如果联合类型有多个大小写并且是结构,则联合类型中的所有字段都必须具有唯一的名称de>。您可以按以下示例命名每个案例中的值:

[<Struct>]
type foo =
| Yes of yes:bool
| Number of number:decimal

F#很大程度上使得在F#中定义的类型不可能为空,因此您可以对所有内容使用
选项
,而不是区分引用类型和值类型。
可空
仅在使用它的现有.NET代码时才真正有用。

为什么可以为空,而不是选项?可以为空这里有要求吗?
type test(value) =
    member this.Value : Option<foo> = value

test(Some (Number 1M)) // some value
test(None) // no value