как использовать C # обнуляемую дату и время в F # - PullRequest
2 голосов
/ 15 мая 2019

У меня есть метод C #, который возвращает DateTime?

, и я хотел бы сделать эквивалент:

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

но это не работает;"None" не компилируется

Ответы [ 2 ]

7 голосов
/ 15 мая 2019

Сначала преобразуйте ваше значение в Option через Option.ofNullable, а затем сопоставьте по результату:

let nd = csharpMethod()
match Option.ofNullable nd with
| Some d -> printfn "Date = %A" d
| None -> printfn "Null date"
5 голосов
/ 15 мая 2019

Подход Федора с преобразованием Nullable в Option более безопасен, так как тогда вам нужно использовать сопоставление с образцом для доступа к значению, но следует отметить, что вы также можете использовать методы Nullable напрямую:

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

Это может быть лучше в узком цикле, когда вы хотите избежать дополнительного распределения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...