Null-Conditional Operators
null can be quite a nuisance: each time
you receive an object, you’re technically
supposed to check for null.
C# has added some operators that alleviate
the syntactic burden null imposes on you.
Member Access
Consider the code below:
if ( someObject != null )
{
someObject.someAction();
}
This can be replaced by
someObject?.someAction();
The ?. operator first checks if someObject is null,
and only if that is not the case, the method someAction will be called.
In case someAction returns a value:
var result = someObject?.someAction();
result will contain null if someObject is null, otherwise
it will be set to someAction’s return value. If necessary,
the return type is made nullable, e.g., int is upgraded to int?
in order to null values.
Indexing
C# offers a similar constructor for indexing:
if ( someContainer != null )
{
var element = someContainer[i];
}
can be replaced by
var element = someContainer?[i];
Here, element will be assigned null if someContainer is null.
Null Coalescing Operator
Say you have an object x which you don’t want to be null.
If it is, you’d like this null to be replaced by some default value:
x != null ? x : defaultValue
C# provides the null coalescing operator to shorten the syntax:
x ?? defaultValue
For example, this can come in handy to remove the “nullability” from value types:
void Foo(int? x)
{
int y = x ?? 0; // Either use x, or 0 if x is null
}