Understanding and Using C#'s Null-Conditional Operator (`?.`): Preventing `NullReferenceException` Errors

Learn how to use C#'s null-conditional operator (`?.`) to safely access members of objects that might be null. This tutorial explains how `?.` prevents `NullReferenceException` errors, simplifies null checks, and improves code readability.



Understanding C#'s Null-Conditional Operator

The C# null-conditional operator (`?.`) provides a concise way to check for null values in object reference chains before accessing members (methods or properties). This helps prevent `NullReferenceException` errors.

NullReferenceException in C#

In C#, attempting to access a member of a null object throws a `NullReferenceException`. This is a common runtime error. The null-conditional operator helps avoid this.

Null Checks with `if` Statements

Traditionally, null checks are performed using `if` statements:


if (student != null && student.Name != null) {
    Console.WriteLine(student.Name.ToUpper());
}

Using the Null-Conditional Operator

The null-conditional operator (`?.`) simplifies null checks. If the left-hand operand is null, the entire expression short-circuits, and `null` is returned. Otherwise, the member access is performed.


string upperName = student?.Name?.ToUpper();

If `student` or `student.Name` is null, `upperName` will be null; otherwise, it'll contain the uppercase name.

Example: Handling Nulls


Console.WriteLine(student?.Name?.ToUpper() ?? "Name is empty");

The null-coalescing operator (`??`) provides a default value ("Name is empty" in this case) if the left operand (`student?.Name?.ToUpper()`) is null.