Switch expression (modern C#) - Time & Space Complexity
We want to understand how the time it takes to run a switch expression changes as the input grows.
Specifically, does adding more cases make the program slower?
Analyze the time complexity of the following code snippet.
string GetDayType(int day) => day switch
{
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday",
_ => "Invalid"
};
This code returns the name of the day based on a number using a modern switch expression.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: None repeating. The switch is a single control structure.
- How many times: Evaluated once per call in constant time.
The C# compiler optimizes switch expressions on integers to a jump table (array lookup), which is constant time regardless of the number of cases.
| Input Size (number of cases) | Approx. Operations |
|---|---|
| 5 | 1 lookup |
| 10 | 1 lookup |
| 100 | 1 lookup |
Pattern observation: Constant time O(1), independent of the number of cases.
Time Complexity: O(1)
This means the execution time is constant, even as the number of cases grows, thanks to compiler optimizations like jump tables.
[X] Wrong: "Switch expressions check cases one by one, so O(n) where n is number of cases."
[OK] Correct: For integral types like int with known values, the compiler generates a jump table for O(1) lookup, not linear scanning.
Understanding compiler optimizations for switch shows deep knowledge of how high-level code translates to efficient machine instructions.
"What if the switch expression used a dictionary lookup instead? How would the time complexity change?"
(Hint: Dictionary lookup is amortized O(1), similar to switch jump table.)
Practice
_ symbol in a modern C# switch expression?Solution
Step 1: Understand the role of
The underscore_in switch expressions_is used as a discard pattern that matches any value not matched by previous cases.Step 2: Recognize it as the default case
This means it acts like a default or fallback case to handle all other inputs.Final Answer:
It acts as a default case to catch all unmatched values. -> Option CQuick Check:
_= default case [OK]
- Thinking '_' declares a variable
- Confusing '_' with case separator
- Assuming '_' ends the switch
Solution
Step 1: Identify correct switch expression syntax
In modern C#, switch expressions use the syntax:variable switch { pattern => result, ... }.Step 2: Compare options to syntax
var result = number switch { 2 => "Even", 4 => "Even", 1 => "Odd", 3 => "Odd" }; matches this syntax exactly. Options B, C, and D use incorrect syntax like parentheses or keywords not used in switch expressions.Final Answer:
var result = number switch { 2 => "Even", 4 => "Even", 1 => "Odd", 3 => "Odd" }; -> Option BQuick Check:
Correct switch expression syntax = var result = number switch { 2 => "Even", 4 => "Even", 1 => "Odd", 3 => "Odd" }; [OK]
- Using parentheses instead of braces
- Using 'case' keyword inside switch expression
- Using colons instead of =>
int day = 3;
string dayName = day switch
{
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
_ => "Unknown"
};
Console.WriteLine(dayName);Solution
Step 1: Match the value of
The variabledayin the switch expressiondayis 3, so the switch expression looks for the case matching 3.Step 2: Find the corresponding string for case 3
The case 3 returns "Wednesday". Since it matches, the default case_is ignored.Final Answer:
Wednesday -> Option AQuick Check:
day=3 matches 3 => "Wednesday" [OK]
- Choosing default case instead of matching case
- Confusing case numbers with strings
- Ignoring the switch expression syntax
string result = value switch
{
1 => "One",
2 => "Two",
3 => "Three",
default => "Other"
};Solution
Step 1: Check syntax for default case in switch expressions
Modern C# switch expressions use_as the default case, not the keyworddefault.Step 2: Identify the incorrect use of 'default'
The code usesdefault => "Other", which is invalid syntax in switch expressions.Final Answer:
Using 'default' keyword instead of '_' for default case. -> Option AQuick Check:
Default case = '_' not 'default' [OK]
- Using 'default' instead of '_'
- Forgetting commas between cases
- Confusing switch statement syntax with switch expression
Solution
Step 1: Understand pattern matching syntax in switch expressions
Modern C# supports relational patterns like< 10and logical patterns likeandto combine conditions.Step 2: Check each option for correct range coverage
var size = number switch { < 10 => "Small", >= 10 and <= 20 => "Medium", _ => "Large" }; uses< 10for "Small", and>= 10 and <= 20for "Medium", which correctly covers 10 to 20 inclusive. The default_covers "Large".Final Answer:
var size = number switch { < 10 => "Small", >= 10 and <= 20 => "Medium", _ => "Large" }; -> Option DQuick Check:
Use relational and logical patterns for ranges [OK]
- Using invalid syntax like '10 <= number <= 20'
- Missing inclusive range boundaries
- Using overlapping or incorrect ranges
Ready to prove it?
Pass the test and this pattern moves unknown
