如何在F#中使用C#可为null的日期时间

Tho*_*mas 2 f#

我有C#方法返回DateTime吗?

并且我想做相当于:

DateTime? D;
if (D == null)
{
    ...
}
else
{
    Date = (DateTime)D;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是在F#中

如何才能做到这一点?


我尝试了这个:

    match (d: Nullable<DateTime>) with
    | None -> printfn "null"
    | NonNull s -> printfn "d %s" s.ToString
Run Code Online (Sandbox Code Playgroud)

但它不起作用;“无”不会编译

Fyo*_*kin 7

首先将您的值转换为Optionvia Option.ofNullable,然后匹配该结果:

let nd = csharpMethod()
match Option.ofNullable nd with
| Some d -> printfn "Date = %A" d
| None -> printfn "Null date"
Run Code Online (Sandbox Code Playgroud)


Tom*_*cek 6

Fyodor转换Nullable为的方法Option更安全,因为您必须使用模式匹配来访问该值,但应注意,您还可以Nullable直接使用以下方法:

let nd = csharpMethod()
if nd.HasValue then printfn "Date = %A" nd.Value
else printfn "Null date"
Run Code Online (Sandbox Code Playgroud)

在紧密循环中,这可能会更好,因为您希望避免额外分配。