Null-conditional operator in C Sharp (C#) - Time & Space Complexity
We want to see how using the null-conditional operator affects the speed of our code.
Specifically, does it add extra work when checking for null values?
Analyze the time complexity of the following code snippet.
string? name = GetName();
int? length = name?.Length;
Console.WriteLine(length);
This code safely gets the length of a string only if the string is not null.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: A single property access with a null check.
- How many times: Exactly once per execution.
Since this code runs a single check and property access, the work stays the same no matter the input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The number of operations does not grow with input size.
Time Complexity: O(1)
This means the operation takes the same amount of time no matter how big the input is.
[X] Wrong: "Using the null-conditional operator makes the code slower because it adds extra checks for every property access."
[OK] Correct: The null-conditional operator adds a simple check that runs once per access, so it does not slow down the code as input size grows.
Understanding how simple operators affect performance helps you write safe and efficient code, a skill valued in many coding challenges and real projects.
What if we used the null-conditional operator inside a loop over a large list? How would the time complexity change?
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
