gpt4 book ai didi

f# - 与 DateTime.MinValue 进行模式匹配?

转载 作者:行者123 更新时间:2023-12-01 13:40:17 24 4
gpt4 key购买 nike

我正在编写一个使用 Quartz.Net 的 F# 服务轮询另一个服务(已用 C# 编写):

[<PersistJobDataAfterExecution>]
[<DisallowConcurrentExecution>]
type PollingJob() =
interface IJob with
member x.Execute(context: IJobExecutionContext) =
let uri = "http://localhost:8089/"
let storedDate = context.JobDetail.JobDataMap.GetDateTime("LastPoll")
//this works...
let effectiveFrom = (if storedDate = DateTime.MinValue then System.Nullable() else System.Nullable(storedDate))

let result = someFunction uri effectiveFrom

context.JobDetail.JobDataMap.Put("LastPoll", DateTime.UtcNow) |> ignore

context传递给 Execute Quartz 为每个民意调查提供的功能,并包含一个字典。服务第一次运行 LastPoll 的值将是默认值 DateTime值即 01/01/0001 00:00:00 .然后下次调度程序运行 LastPoll将包含最后一次投票的时间。

我可以创建一个 Nullable<DateTime>使用 if..then..else构造(上图)但是当我尝试使用模式匹配时,我得到一个编译器错误,在 DateTime.MinValue 下有一个波浪线:

This field is not a literal and cannot be used in a pattern

我尝试使用的代码如下:

//this doesn't...
let effectiveFrom =
match storedDate with
| DateTime.MinValue -> System.Nullable()
| _ -> System.Nullable(storedDate)

最佳答案

您使用的模式匹配略有不正确。

以下应该有效:

    let effectiveFrom = 
match storedDate with
| d when d = DateTime.MinValue -> System.Nullable()
| _ -> System.Nullable(storedDate)

当您想要将相等性作为模式匹配的一部分进行测试时,您需要使用 when 子句(参见此处 - https://fsharpforfunandprofit.com/posts/match-expression/)

关于f# - 与 DateTime.MinValue 进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com