Боюсь, что нет синтаксического сахара для обнуляемых типов в F # (в отличие от C #, где вы просто добавляете ?
к типу). Так что да, код, который вы там показываете, выглядит ужасно многословно, но это единственный способ использовать тип 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 #, и я должен подумать, что вы действительно хотите использовать их, а не обнуляемые типы (если только вы не взаимодействуете с C #). Разница в реализации заключается в том, что типы опций формируются из различимого объединения из Some(x)
и None
, тогда как Nullable<T>
является нормальным классом в BCL с небольшим синтаксическим сахаром в C #.