我有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)
但它不起作用;“无”不会编译
首先将您的值转换为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)
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)
在紧密循环中,这可能会更好,因为您希望避免额外分配。