Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 模式匹配守卫与DateTime.TryParseExact?_F#_Guard Clause - Fatal编程技术网

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 :: [] -> ...