What is the right way to use Nullable in F#?
Currently I’m using this, but it seems awefully messy.
let test (left : Nullable<int>) = if left.HasValue then left.Value else 0
Console.WriteLine(test (new System.Nullable<int>()))
Console.WriteLine(test (new Nullable<int>(100)))
let x = 100
Console.WriteLine(test (new Nullable<int>(x)))
I’m afraid there’s no syntactical sugar for nullable types in F# (unlike in C# where you simply append a
?to the type). So yeah, the code you show there does look terribly verbose, but it’s the only way to use theSystem.Nullable<T>type in F#.However, I suspect what you really want to be using are option types. There’s a few decent examples on the MSDN page:
and
Clearly a lot nicer to use!
Options essentially fulfill the role of nullable types in F#, and I should think you really want to be using them rather than nullable types (unless you’re doing interop with C#). The difference in implementation is that option types are formed by a discriminated union of
Some(x)andNone, whereasNullable<T>is a normal class in the BCL, with a bit of syntactical sugar in C#.