F# 模式匹配守卫与DateTime.TryParseExact?
如何使用F# 模式匹配守卫与DateTime.TryParseExact?,f#,guard-clause,F#,Guard Clause,如何使用DateTime.TryParseExact进行保护(如果可能的话,获取解析的值)?以下代码不起作用 [<EntryPoint>] let main args = let argList = args |> List.ofSeq match argList with | "aaa" :: [] -> aaa.main "aaa" | "bbb" :: [] -> bbb.main "bbb" | "ccc" :: yy
DateTime.TryParseExact进行保护(如果可能的话,获取解析的值)?以下代码不起作用
[<EntryPoint>]
let main args =
let argList = args |> List.ofSeq
match argList with
| "aaa" :: [] -> aaa.main "aaa"
| "bbb" :: [] -> bbb.main "bbb"
| "ccc" :: yyyymm :: [] when DateTime.TryParseExact
(yyyymm, "yyyyMM", CultureInfo.InvariantCulture, DateTimeStyles.None)->
ccc.main "ccc" yyyymm
[]
让主参数=
设argList=args |>List.ofSeq
将argList与
|“aaa”::[]->aaa.main“aaa”
|“bbb”::[]->bbb.main“bbb”
|“ccc”::yyyymm::[]当DateTime.TryParseExact
(yyyymm,“yyyymm”,CultureInfo.InvariantCulture,DateTimeStyles.None)->
ccc.main“ccc”yyyymm
您可以使用可变的
:
let mutable dt = Unchecked.defaultof<_>
match argList with
| "ccc" :: yyyymm :: [] when
DateTime.TryParseExact(yyyymm,
"yyyyMM",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
&dt) -> ...
伟大的使用活动模式时,如何获取列表第二项(yyyymm
)的原始字符串值?yyyymm
的类型是DateTime
。编辑:我可以更新DateTimeExact
以返回Some s
以获取原始字符串值。想知道获取解析前和解析后值的最佳方法是什么吗?您可以更改活动模式以同时返回:Some(s,d)
let (|DateTimeExact|_|) (format: string) s =
match DateTime.TryParseExact(s, format, CultureInfo.InvariantCulture, DateTimeStyles.None) with
| true, d -> Some d
| _ -> None
match argList with
| "ccc" :: DateTimeExact "yyyyMM" yyyymm :: [] -> ...