如何在f#中将整数设置为null?

时间:2017-05-02 20:55:56

标签: c# .net f#

在C#中,我可以声明一个可以为空的类型:

int? myNullableInt;

我正在尝试做一些互操作,需要在F#中声明并设置一个可空的类型,所以我声明了这样一个类:

type TestEntity() =
    member val OptionalValue = Nullable(1) with get, set

后来我试图像这样分配它:

let testEnt = TestEntity()
testEnt.Optional <- null

但它不起作用。

在F#中执行此操作的正确方法是什么?此外,在互操作层,这与C#中的int?行为相同吗?

2 个答案:

答案 0 :(得分:7)

我建议避免使用与F#中的瘟疫类似null的值,您应该使用Option<'T>并在C#边界转换为Nullable<'T>

您可以使用Option<'T>Nullable<'T>转换为Option.toNullable

您可以使用Nullable<'T>Option<'T>转换为Option.ofNullable

testEnt.Optional <- Option.toNullable None

testEnt.Optional <- Option.toNullable (Some 5)

答案 1 :(得分:5)

试试这个:

testEnt.OptionalValue <- Nullable()
  1. 您需要使用与您声明的可选属性相同的名称。
  2. null实际上并不是值类型的有效值。即使C#使用一些神奇的语法糖来处理null,就像它与Nullable<T>类型兼容一样,当你将null分配给int?时,你真正得到的结果是什么?在C#中是default(Nullable<int>)(又名new Nullable<int>())。 F#没有添加这种语法糖,所以你必须更加明确它。但是,除了语言特定的更改之外,CLR将以与从C#处理Nullable<int>相同的方式对待它。