繁体   English   中英

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

[英]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.toNullableOption<'T>转换为Nullable<'T>

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

testEnt.Optional <- Option.toNullable None

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

尝试这个:

testEnt.OptionalValue <- Nullable()
  1. 您需要使用与您声明的可选属性相同的名称。
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM