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

Pattern matching in switch in C Sharp (C#) - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Pattern matching in switch
Input value
↓
Switch statement
↓
Check case patterns one by one
↓
Match found?
No→Default case or exit
Yes↓
Execute matched case block
↓
End switch
The switch statement takes an input and checks it against multiple patterns. When a pattern matches, it runs the corresponding code block and then exits.
Execution Sample
C Sharp (C#)
object obj = 42;
switch (obj)
{
    case int i:
        Console.WriteLine($"Integer: {i}");
        break;
    case string s:
        Console.WriteLine($"String: {s}");
        break;
    default:
        Console.WriteLine("Unknown type");
        break;
}
This code checks the type of obj and prints a message depending on whether it is an int, a string, or something else.
Execution Table
StepInput ValuePattern CheckedMatch ResultAction TakenOutput
142 (int)case int iMatchPrint Integer: 42Integer: 42
242 (int)case string sNot checked (already matched)No action
342 (int)defaultNot checked (already matched)No action
4EndSwitch endsExitSwitch ends
💡 Pattern matched at step 1, switch exits after executing matched case.
Variable Tracker
VariableStartAfter Step 1After Step 4
obj42 (int)42 (int)42 (int)
i (int)undefined4242
s (string)undefinedundefinedundefined
Key Moments - 3 Insights
Why does the switch stop checking other cases after a match?
Once a pattern matches (see execution_table step 1), the switch executes that case and exits to avoid running multiple cases.
What happens if no pattern matches the input?
If no pattern matches, the default case runs (if present). In the example, default is not reached because int matches first.
How does pattern matching extract variables like 'i'?
When a pattern matches, the matched value is assigned to the variable (e.g., 'i' gets 42 at step 1), so you can use it inside the case block.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'i' after step 1?
Aundefined
B42
Cnull
Dstring value
💡 Hint
Check variable_tracker row for 'i' after step 1.
At which step does the switch stop checking further patterns?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
See execution_table where match is found and switch exits.
If obj was a string "hello", which pattern would match?
Adefault
Bcase int i
Ccase string s
DNo match
💡 Hint
Look at the patterns and their types in the code sample.
Concept Snapshot
switch (value) {
  case Type varName: // matches type and assigns
    // code block
    break;
  default:
    // fallback code
    break;
}
Pattern matching checks each case pattern in order and runs the first matching block.
Full Transcript
Pattern matching in switch lets you check the type or shape of a value and run code based on that. The switch statement tests each pattern one by one. When a pattern matches, it assigns the matched value to a variable and runs the case block. Then it stops checking further cases. If no pattern matches, the default case runs if present. This helps write clear and concise code that reacts to different data types or conditions.

Practice

(1/5)
1. What does pattern matching in a switch statement primarily help you do in C#?
easy
A. Check an object's type and properties in a clear way
B. Loop through collections more efficiently
C. Declare variables with less code
D. Handle exceptions automatically

Solution

  1. Step 1: Understand pattern matching purpose

    Pattern matching in switch lets you test an object's type and properties clearly.
  2. Step 2: Compare with other options

    Looping, variable declaration, and exception handling are unrelated to pattern matching in switch.
  3. Final Answer:

    Check an object's type and properties in a clear way -> Option A
  4. Quick Check:

    Pattern matching = type and property checks [OK]
Hint: Pattern matching checks types and conditions clearly [OK]
Common Mistakes:
  • Confusing pattern matching with loops
  • Thinking it handles exceptions
  • Believing it declares variables automatically
2. Which of the following is the correct syntax to match an integer variable num equal to 10 using pattern matching in a switch expression?
easy
A. case int n when n == 10:
B. case int n == 10:
C. case int n => 10:
D. case int n is 10:

Solution

  1. Step 1: Recall correct pattern matching syntax

    To match a value with a condition, use case Type variable when condition:.
  2. Step 2: Check each option

    case int n when n == 10: uses when n == 10, which is correct. Others use invalid syntax.
  3. Final Answer:

    case int n when n == 10: -> Option A
  4. Quick Check:

    Use 'when' for conditions in pattern matching [OK]
Hint: Use 'when' keyword for conditions in switch patterns [OK]
Common Mistakes:
  • Using '==' directly after case without 'when'
  • Using '=>' or 'is' incorrectly in case
  • Omitting the variable name
3. What will be the output of this C# code?
object obj = 42;
switch (obj)
{
    case int n when n > 40:
        Console.WriteLine("Greater than 40");
        break;
    case int n:
        Console.WriteLine("Integer");
        break;
    default:
        Console.WriteLine("Other");
        break;
}
medium
A. Integer
B. Other
C. Greater than 40
D. No output (compile error)

Solution

  1. Step 1: Identify the object type and value

    obj is an integer with value 42.
  2. Step 2: Evaluate switch cases in order

    First case matches int n when n > 40, which is true for 42, so prints "Greater than 40" and breaks.
  3. Final Answer:

    Greater than 40 -> Option C
  4. Quick Check:

    Pattern with 'when' matched first [OK]
Hint: Check cases top to bottom; first match runs [OK]
Common Mistakes:
  • Ignoring the 'when' condition
  • Assuming second case runs first
  • Thinking default runs for int
4. Identify the error in this switch statement using pattern matching:
object val = "hello";
switch (val)
{
    case string s when s.Length > 3
        Console.WriteLine("Long string");
        break;
    default:
        Console.WriteLine("Other");
        break;
}
medium
A. Cannot use 'when' with string type
B. Missing colon ':' after case pattern
C. Missing parentheses around condition
D. Incorrect variable name in case

Solution

  1. Step 1: Check switch case syntax

    Each case pattern must end with a colon ':' before the statements.
  2. Step 2: Locate missing colon

    The case line lacks ':' after when s.Length > 3, causing syntax error.
  3. Final Answer:

    Missing colon ':' after case pattern -> Option B
  4. Quick Check:

    Case patterns need ':' after condition [OK]
Hint: Always put ':' after case pattern line [OK]
Common Mistakes:
  • Forgetting ':' after case pattern
  • Adding parentheses around 'when' condition
  • Thinking 'when' can't be used with strings
5. Given a list of objects items containing integers and strings, how would you use pattern matching in a switch expression to return a new list of strings where:
- Integers greater than 10 become "Big number"
- Strings longer than 5 characters become "Long text"
- All others become "Other"?

Which code snippet correctly implements this?
hard
A. items.Select(item => item switch { int n when n > 10: "Big number", string s when s.Length > 5: "Long text", _ => "Other" }).ToList();
B. items.Select(item => switch (item) { case int n if n > 10: "Big number"; case string s if s.Length > 5: "Long text"; default: "Other"; }).ToList();
C. items.Select(item => item switch { int n if n > 10: "Big number", string s if s.Length > 5: "Long text", _ => "Other" }).ToList();
D. items.Select(item => item switch { int n when n > 10 => "Big number", string s when s.Length > 5 => "Long text", _ => "Other" }).ToList();

Solution

  1. Step 1: Understand switch expression syntax

    Switch expressions use '=>' for cases, and 'when' for conditions.
  2. Step 2: Check each option's syntax

    items.Select(item => item switch { int n when n > 10 => "Big number", string s when s.Length > 5 => "Long text", _ => "Other" }).ToList(); uses correct 'item switch { case => result }' with 'when' and '=>'. Other options use invalid syntax ('switch' inside lambda or 'if' instead of 'when'). items.Select(item => item switch { int n when n > 10: "Big number", string s when s.Length > 5: "Long text", _ => "Other" }).ToList(); uses ':' instead of '=>', which is invalid in switch expressions.
  3. Final Answer:

    items.Select(item => item switch { int n when n > 10 => "Big number", string s when s.Length > 5 => "Long text", _ => "Other" }).ToList(); -> Option D
  4. Quick Check:

    Switch expressions use '=>' and 'when' [OK]
Hint: Use '=>' and 'when' in switch expressions for conditions [OK]
Common Mistakes:
  • Using ':' instead of '=>' in switch expressions
  • Using 'if' instead of 'when' for conditions
  • Trying to put 'switch' keyword inside lambda
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