What if you could avoid crashes from missing data with just a simple symbol?
Why Null-conditional operator in C Sharp (C#)? - Purpose & Use Cases
Imagine you have a list of friends, and you want to check their phone numbers. But some friends might not have a phone number saved. You have to check each friend carefully before asking for their number to avoid errors.
Without the null-conditional operator, you must write many checks like if (friend != null && friend.Phone != null). This makes your code long, hard to read, and easy to forget checks, causing crashes.
The null-conditional operator lets you ask for a property or call a method safely in one simple step. It automatically stops and returns null if something is missing, so your code stays clean and safe.
if (friend != null && friend.Phone != null) { var number = friend.Phone.Number; }var number = friend?.Phone?.Number;
You can write shorter, safer code that gracefully handles missing data without extra checks.
When loading user profiles, some users might not have set their address. Using the null-conditional operator, you can safely display their city without crashing your app.
Manual null checks make code long and error-prone.
The null-conditional operator simplifies safe access to nested data.
It helps prevent crashes by handling missing values gracefully.
Practice
?. do in C#?Solution
Step 1: Understand the purpose of the null-conditional operator
The operator?.is used to access members of an object only if the object is not null.Step 2: Behavior when object is null
If the object is null, instead of throwing an exception, it returns null safely.Final Answer:
It safely accesses a member only if the object is not null, otherwise returns null. -> Option AQuick Check:
Null-conditional operator = safe member access [OK]
- Thinking it throws an exception on null
- Confusing it with null-coalescing operator
- Assuming it converts null to empty string
Length property of a string variable text that might be null?Solution
Step 1: Identify correct null-conditional syntax
The null-conditional operator is?.placed before the member name, liketext?.Length.Step 2: Match variable type with possible null
Sincetextmight be null, the resulttext?.Lengthis nullable, so useint?to hold it.Final Answer:
int? length = text?.Length; -> Option BQuick Check:
Correct syntax = int? length = text?.Length; [OK]
- Placing ? after Length instead of before
- Using non-nullable int for nullable result
- Adding extra dots or question marks
string? name = null; int? length = name?.Length; Console.WriteLine(length == null ? "Null" : length.ToString());
Solution
Step 1: Evaluate null-conditional operator on null string
The variablenameis null, soname?.Lengthreturns null safely.Step 2: Check output logic
The code prints "Null" iflengthis null, otherwise prints the length. Sincelengthis null, it prints "Null".Final Answer:
Null -> Option AQuick Check:
Null string length = null, prints "Null" [OK]
- Expecting 0 instead of null
- Thinking it throws exception
- Confusing null with empty string
Person? person = null; int age = person?.Age; Console.WriteLine(age);
Solution
Step 1: Analyze the type of person?.Age
The expressionperson?.Agereturnsint?(nullable int) because person might be null.Step 2: Check assignment compatibility
Variableageis declared asint(non-nullable), so assigningint?tointwithout conversion causes a compile error.Final Answer:
Cannot assign nullable int to non-nullable int without cast. -> Option CQuick Check:
Nullable to non-nullable assignment needs cast [OK]
- Ignoring nullable type returned by ?. operator
- Assuming no error on assignment
- Thinking null-conditional operator is invalid here
Person objects where some may be null, how can you safely get a List<int> of their ages (with 0 for null persons) using the null-conditional operator?List<Person?> people = new() { new Person(30), null, new Person(25) };
var ages = ???;Choose the correct code to replace
???.Solution
Step 1: Understand the list and nulls
The list containsPerson?objects, some are null, so accessingAgeneeds safe access.Step 2: Use null-conditional with fallback
p?.Agesafely accesses Age or returns null; using?? 0replaces null ages with 0 to avoid nullable list.Step 3: Check other options
people.Select(p => p?.Age).ToList(); returns nullable ints, people.Select(p => p.Age).ToList(); throws exception on null, people.Select(p => p.Age ?? 0).ToList(); is invalid becausepcan be null.Final Answer:
people.Select(p => p?.Age ?? 0).ToList(); -> Option DQuick Check:
Safe access with fallback = people.Select(p => p?.Age ?? 0).ToList(); [OK]
- Not handling null Person objects
- Forgetting to provide fallback value
- Assuming Select handles nulls automatically
Ready to prove it?
Pass the test and this pattern moves unknown
