[英]How do I set an integer to null in f#?
在C#中,我可以像这样声明一个可空类型:
int? myNullableInt;
我正在尝试做一些互操作,需要在F#中声明并设置一个可空类型,所以我声明了一个这样的类:
type TestEntity() =
member val OptionalValue = Nullable(1) with get, set
后来我试着像这样分配它:
let testEnt = TestEntity()
testEnt.Optional <- null
但它不起作用。
在F#中执行此操作的正确方法是什么? 此外,在互操作层,它的行为与int?
相同int?
在C#中做什么?
我建议避免像F#中的瘟疫那样可能为null
值,你应该使用Option<'T>
并在C#边界转换为Nullable<'T>
。
您可以使用Option.toNullable
将Option<'T>
转换为Nullable<'T>
。
您可以使用Option.ofNullable
将Nullable<'T>
转换为Option<'T>
。
testEnt.Optional <- Option.toNullable None
testEnt.Optional <- Option.toNullable (Some 5)
尝试这个:
testEnt.OptionalValue <- Nullable()
null
实际上不是值类型的有效值。 即使C#使用一些魔术和语法糖来处理null
,就像它与Nullable<T>
类型兼容一样,当你为一个int?
赋值null
时,你最终会得到int?
在C#中是default(Nullable<int>)
(又名new Nullable<int>()
)。 F#没有添加这种语法糖,所以你必须更加明确它。 但是在特定于语言的更改之外,CLR将以与从C#处理Nullable<int>
相同的方式对待它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.