【问题标题】:how to use a C# nullable datetime in F#如何在 F# 中使用 C# 可为空的日期时间
【发布时间】:2019-05-15 18:26:44
【问题描述】:

我有一个返回 DateTime 的 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

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

【问题讨论】:

  • 您可以更改方法以返回Option 还是必须使用Nullable
  • 我有一个返回 DateTime 的 C# 函数? (来自数据库调用),我希望在 F# 中执行一些逻辑,然后在最后返回一个日期或空值。我一直在做 F# 30 分钟,所以答案可能很明显:)
  • 自 F# 4 以来就有 Option.ofNullable,您可以将其用作“适配器”。
  • 你有链接显示这是如何工作的吗?

标签: f#


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    let nd = csharpMethod()
    if nd.HasValue then printfn "Date = %A" nd.Value
    else printfn "Null date"
    

    这在您想要避免额外分配的紧密循环中可能会更好。

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2016-07-17
      • 2016-06-16
      • 2021-06-26
      • 1970-01-01
      • 2020-06-17
      • 2023-03-26
      • 1970-01-01
      • 2015-11-02
      相关资源
      最近更新 更多