Ответ 1
Я боюсь, что нет синтаксического сахара для типов с нулевым значением в F # (в отличие от С#, где вы просто добавляете ?
к типу). Так что да, код, который вы там показываете, выглядит ужасно многословным, но это единственный способ использовать тип System.Nullable<T>
в F #.
Однако я подозреваю, что вы действительно хотите использовать типы опций. На странице MSDN есть несколько достойных примеров:
let keepIfPositive (a : int) = if a > 0 then Some(a) else None
и
open System.IO
let openFile filename =
try
let file = File.Open (filename, FileMode.Create)
Some(file)
with
| exc -> eprintf "An exception occurred with message %s" exc.Message; None
Ясно, что гораздо приятнее использовать!
Параметры, по существу, выполняют роль типов с нулевым значением в F #, и я должен думать, что вы действительно хотите использовать их, а не типы с нулевым значением (если только вы не взаимодействуете с С#). Разница в реализации заключается в том, что типы опций формируются с помощью дискриминированного объединения Some(x)
и None
, тогда как Nullable<T>
является нормальным классом в BCL с небольшим количеством синтаксического сахара в С#.