C# included a types provides solution to common and irritating problem. Feature is nullable type.

The problem is lies with recognize and handle the fields that do not contain values for value types.
In past, unused fields required use of either placeholder values or extra field that simply indicated whether a field was in use. The nullable type solves both problems.

Nullable Basics

Nullable type is special version of value types that is represented by structure. In addition to values defined by underlying type, a nullable type can also store value null. Thus, nullable type has same range & characteristics as its underlying type. Simply adds ability to represent value that indicates that variable of that type is unassigned.

Nullable Objects in Expressions

The ?? Operator

Attempt to use cast to convert of Nullable object to underlying type, InvalidOperationException will be thrown if Nullable object contains a null value.

Nullable Objects & Relational - Logical Operators

Nullable can be used in relational expressions just same way as their non-nullable types.
However, there is one additional rule that applies. When two Nullable objects are compared using logical operators, result is false if either of Nullable objects is null.

One other point: When the ! operator is applied to a bool ? value that is null, the outcome is null.