Option<T>
This type represents an optional value.
Instances of Option<T>
encapsulates the value as a container and only allow access through the Match
e Match2
methods.
Option values are considered in IsNone
state when the encapsulated value are equals to null
or equals to its default.
Properties
Name
Type
Description
IsSome
bool
Returns true when the value is not null and is not equals to its default value. Otherwise, returns false.
IsNone
bool
Returns true when the value is null or equals to its default value. Otherwise, returns false.
Constructors
Parameters
Returns
Description
T value
Option<T>
Initialize a new instance of Option<T>
Methods
Name
Parameters
Returns
Description
Some
T value
Option<T>
Creates Some<T> if the parameter is not null or equals to its default value. Otherwise creates None.
None
Option<T>
Creates Option<T> with IsNone state.
Match
Func<T, TResult> methodWhenSome
Func<TResult> methodWhenNone
TResult
This allows a sophisticated way to apply some method for Option<T> values without having to check for the existence of a value.
Match2
Option<T2> option2
Func<T, T2, TResult> methodWhenSome
Func<TResult> methodWhenNone
TResult
This allows a sophisticated way to apply some method for two different Option<T> values without having to check for the existence of a value.
Match
Action<T> actionWhenSome
Action actionWhenNone
void
This allows a sophisticated way to apply some method for Option<T> values without having to check for the existence of a value.
Match2
Option<T2> option2
Action<T, T2> actionWhenSome
Action actionWhenNone
void
This allows a sophisticated way to apply some method for two different Option<T> values without having to check for the existence of a value.
Operators Overload
Operator
Parameters
Description
Implicit Cast
T value
Creates Some<T> if the parameter is not null or equals to its default value. Otherwise creates None.
Usage
You can use an Option value in so many different ways.
Creating an option value
You can use the constructor to create option values in IsSome
or IsNone
states, according its parameter.
Constructors
You can also use the static methods Some
or None
to define the desired state of the value. The Some
method can be little tricky because it there's no guarantees that the created value will be at IsSome
state, because it depends on the value passed as parameter.
Some and None methods
Finally the simplest version: implict cast. Because of this feature you don't need to worry about any kind of syntax, you just create the value as regular types.
Implicit cast
Through this implicit cast you can creates new option values by using regular return commands.
See:
In a more functional way:
Realize the fact that the method returns just a regular string
or null
values, without creates an Option
value.
This method works fine, but is more elegant to use the None
method of Option
class instead of null
.
Getting value from an option
To get the value encapsulated by an Option<T>
method is necessary uses Match
or Match2
methods. There aren't other way to get this value, so, you need to treat both cases properly.
The Match
method receive two different functions as parameters, one for each case: Some
and None
state.
Match with named parameters
The first method is executed when the value IsSome
, because of it, this method receive an T
value as parameter (int
in this example).
The second method is executed when the value IsNone
, because of it, there's no parameter in this method.
These two functions are just regular parameters, so, you can omit the its names.
Match
Besides that, you can also apply some transformation in value before got it, like square the value:
You can also returns any value in IsNone
state, in the previous examples were used the zero value, but it isn't obrigatory.
Sometimes is necessary compare more than one Option
values, this type provides the Match2
method to compare two different values instead of just one.
Match2
In the previous sample a sum of two different Option
value was made. In this particular case, both Option
was in IsSome
state, so the first method was executed:
(number1, number2) => number1 + number2
In this anonymous method the number1
parameter received the value from optinalValue
(10) and number2
from optionalValue2
(15), resulting 25.
The second method is executed when any Option
value is in IsNone
state.
Match2
There's an overload of Match
and Match2
methods to receive an Action
as parameter instead of a Func
.
The fundamentals about Option values
can be find in Fundamentals > Option Values section.
Last updated
Was this helpful?