私は(それは、C#で書かれている)別のサービスをポーリングするQuartz.Netを使用してF#のサービスを書いています:DateTime.MinValueとのパターンマッチング?
[<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
関数に渡すと辞書が含まれています。サービスが初めて実行されるとき、LastPoll
の値はデフォルトのDateTime
の値、つまり01/01/0001 00:00:00
になります。次に、スケジューラーが次に実行されるときに、LastPoll
は最後のポーリングの時刻を含みます。
私は(上記)if..then..else
構文を使用してNullable<DateTime>
を作成することができますが、私は波線DateTime.MinValue
下でコンパイルエラーを取得するパターンマッチングを使用しようとすると:
このフィールドはリテラルではないとすることはできませんパターン
で使用される次のように私が使用しようとしていますコードは次のとおりです。
//this doesn't...
let effectiveFrom =
match storedDate with
| DateTime.MinValue -> System.Nullable()
| _ -> System.Nullable(storedDate)
、感謝君は。そしてリンクに感謝します。 –