Bird
Raised Fist0
C Sharp (C#)programming~10 mins

Null-conditional operator in C Sharp (C#) - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Null-conditional operator
Start
↓
Evaluate object
↓
Is object null?
Yes→Return null
No↓
Access member or method
↓
Return member value or method result
↓
End
The null-conditional operator checks if an object is null before accessing its member or method, returning null if the object is null to avoid errors.
Execution Sample
C Sharp (C#)
string? name = null;
int? length = name?.Length;
Console.WriteLine(length);
This code safely tries to get the length of a string that might be null, using the null-conditional operator.
Execution Table
StepExpression EvaluatedIs Null?Action TakenResult
1nameYes (null)Skip accessing Length, return nulllength = null
2Console.WriteLine(length)N/APrints empty lineOutput: (empty line)
💡 name is null, so name?.Length returns null, preventing a NullReferenceException
Variable Tracker
VariableStartAfter Step 1After Step 2
namenullnullnull
lengthunassignednullnull
Key Moments - 2 Insights
Why does length become null instead of causing an error when name is null?
Because the null-conditional operator (?.) checks if name is null before accessing Length. If name is null, it returns null immediately, as shown in execution_table step 1.
What happens if we remove the ? and write name.Length when name is null?
It causes a NullReferenceException error because the program tries to access Length on a null object, unlike the safe check in execution_table step 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of length after step 1?
AThrows error
B0
Cnull
DEmpty string
💡 Hint
Check the 'Result' column in execution_table row 1 where length is assigned.
At which step does the program avoid a NullReferenceException?
ABoth steps
BStep 1
CStep 2
DNever avoids
💡 Hint
Look at the 'Action Taken' in execution_table step 1 where null check happens.
If name was "hello", what would length be after step 1?
A5
Bnull
CThrows error
D0
💡 Hint
Think about what Length returns for a non-null string, referencing variable_tracker for length.
Concept Snapshot
Null-conditional operator (?.) safely accesses members or methods.
If the object is null, it returns null instead of throwing an error.
Syntax example: obj?.Member or obj?.Method().
Useful to avoid NullReferenceException.
Returns nullable type if member is value type.
Can chain multiple null-conditional operators.
Full Transcript
The null-conditional operator in C# helps avoid errors when accessing members or methods on objects that might be null. It checks if the object is null first. If it is, it returns null instead of trying to access the member, which would cause an error. For example, if a string variable 'name' is null, then 'name?.Length' returns null safely. This prevents a NullReferenceException. The execution table shows that when 'name' is null, the program skips accessing Length and assigns null to 'length'. Then printing 'length' outputs an empty line because it is null. This operator is very useful to write safer code without many explicit null checks.

Practice

(1/5)
1. What does the null-conditional operator ?. do in C#?
easy
A. It safely accesses a member only if the object is not null, otherwise returns null.
B. It throws an exception if the object is null.
C. It converts a null object to an empty string.
D. It forces the object to be non-null.

Solution

  1. 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.
  2. Step 2: Behavior when object is null

    If the object is null, instead of throwing an exception, it returns null safely.
  3. Final Answer:

    It safely accesses a member only if the object is not null, otherwise returns null. -> Option A
  4. Quick Check:

    Null-conditional operator = safe member access [OK]
Hint: Remember: ?. returns null instead of error if object is null [OK]
Common Mistakes:
  • Thinking it throws an exception on null
  • Confusing it with null-coalescing operator
  • Assuming it converts null to empty string
2. Which of the following is the correct syntax to safely access the Length property of a string variable text that might be null?
easy
A. int length = text.Length?;
B. int? length = text?.Length;
C. int length = text?.Length;
D. int? length = text.Length?.;

Solution

  1. Step 1: Identify correct null-conditional syntax

    The null-conditional operator is ?. placed before the member name, like text?.Length.
  2. Step 2: Match variable type with possible null

    Since text might be null, the result text?.Length is nullable, so use int? to hold it.
  3. Final Answer:

    int? length = text?.Length; -> Option B
  4. Quick Check:

    Correct syntax = int? length = text?.Length; [OK]
Hint: Use int? for nullable results with ?. operator [OK]
Common Mistakes:
  • Placing ? after Length instead of before
  • Using non-nullable int for nullable result
  • Adding extra dots or question marks
3. What is the output of the following code?
string? name = null;
int? length = name?.Length;
Console.WriteLine(length == null ? "Null" : length.ToString());
medium
A. Null
B. Empty string
C. Throws NullReferenceException
D. 0

Solution

  1. Step 1: Evaluate null-conditional operator on null string

    The variable name is null, so name?.Length returns null safely.
  2. Step 2: Check output logic

    The code prints "Null" if length is null, otherwise prints the length. Since length is null, it prints "Null".
  3. Final Answer:

    Null -> Option A
  4. Quick Check:

    Null string length = null, prints "Null" [OK]
Hint: ?. returns null for null object, so output is "Null" [OK]
Common Mistakes:
  • Expecting 0 instead of null
  • Thinking it throws exception
  • Confusing null with empty string
4. Identify the error in this code snippet:
Person? person = null;
int age = person?.Age;
Console.WriteLine(age);
medium
A. Missing semicolon after Console.WriteLine.
B. Null-conditional operator cannot be used on objects.
C. Cannot assign nullable int to non-nullable int without cast.
D. Person class must be non-nullable.

Solution

  1. Step 1: Analyze the type of person?.Age

    The expression person?.Age returns int? (nullable int) because person might be null.
  2. Step 2: Check assignment compatibility

    Variable age is declared as int (non-nullable), so assigning int? to int without conversion causes a compile error.
  3. Final Answer:

    Cannot assign nullable int to non-nullable int without cast. -> Option C
  4. Quick Check:

    Nullable to non-nullable assignment needs cast [OK]
Hint: Nullable result needs nullable variable or cast [OK]
Common Mistakes:
  • Ignoring nullable type returned by ?. operator
  • Assuming no error on assignment
  • Thinking null-conditional operator is invalid here
5. Given a list of 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 ???.
hard
A. people.Select(p => p?.Age).ToList();
B. people.Select(p => p.Age).ToList();
C. people.Select(p => p.Age ?? 0).ToList();
D. people.Select(p => p?.Age ?? 0).ToList();

Solution

  1. Step 1: Understand the list and nulls

    The list contains Person? objects, some are null, so accessing Age needs safe access.
  2. Step 2: Use null-conditional with fallback

    p?.Age safely accesses Age or returns null; using ?? 0 replaces null ages with 0 to avoid nullable list.
  3. 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 because p can be null.
  4. Final Answer:

    people.Select(p => p?.Age ?? 0).ToList(); -> Option D
  5. Quick Check:

    Safe access with fallback = people.Select(p => p?.Age ?? 0).ToList(); [OK]
Hint: Use ?. with ?? to handle nulls and provide default [OK]
Common Mistakes:
  • Not handling null Person objects
  • Forgetting to provide fallback value
  • Assuming Select handles nulls automatically
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard