It is Null-propagating operator / Null-Conditional Operator ?. a new proposed feature in C# 6.0
x?.y?.z
means
- first, check if
x
is not null, then check y
otherwise return null,
- second, when x is not null then check
y
, if it is not null then return z
otherwise return null.
The ultimate return value will be z
or null
.
Without this operator if x
is null, then accessing x.y
would raise a Null Reference Exception, the Null-Conditional operator helps to avoid explicitly checking for null.
It is a way to avoid Null Reference Exception.
See: Getting a sense of the upcoming language features in C#
8 - Null-conditional operators
Sometimes code tends to drown a bit in null-checking. The
null-conditional operator lets you access members and elements only
when the receiver is not-null, providing a null result otherwise:
int? length = customers?.Length; // null if customers is null