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

时间:2019-05-14 23:02:56

标签: f#

我有一个返回日期时间的C#方法?

我想做的等同于:

DateTime? D;
if (D == null)
{
    ...
}
else
{
    Date = (DateTime)D;
    ...
}

但在F#

这怎么办?


我尝试过:

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

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

费奥多(Fyodor)将Nullable转换为Option的方法比较安全,因为您随后必须使用模式匹配来访问值,但应注意,您也可以使用{{1} }直接:

Nullable

在紧密循环中这样做可能会更好,在这种情况下,您希望避免额外分配。