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

Switch expressions with patterns in C Sharp (C#)

Choose your learning style10 modes available
Introduction

Switch expressions with patterns let you choose a result based on the shape or value of data in a clear and simple way.

You want to return different results based on the type of an object.
You need to check if a value fits certain conditions and respond accordingly.
You want to replace long if-else chains with cleaner code.
You want to match values and extract parts of data easily.
Syntax
C Sharp (C#)
var result = value switch
{
    pattern1 => expression1,
    pattern2 => expression2,
    _ => defaultExpression
};

The switch expression evaluates value against each pattern in order.

The underscore _ is a catch-all pattern for anything not matched before.

Examples
This matches exact numbers and returns a string for each case.
C Sharp (C#)
int number = 5;
string result = number switch
{
    1 => "One",
    2 => "Two",
    _ => "Other"
};
This matches the type of obj and extracts the value.
C Sharp (C#)
object obj = "hello";
string result = obj switch
{
    int i => $"Number {i}",
    string s => $"Text '{s}'",
    _ => "Unknown"
};
This uses relational patterns to check ranges.
C Sharp (C#)
int age = 20;
string category = age switch
{
    < 13 => "Child",
    >= 13 and < 20 => "Teen",
    _ => "Adult"
};
Sample Program

This program checks each item in an array and prints a description based on its type or value.

C Sharp (C#)
using System;

class Program
{
    static void Main()
    {
        object[] items = { 42, "apple", 3.14, null };

        foreach (var item in items)
        {
            string description = item switch
            {
                int i => $"Integer: {i}",
                string s => $"String: '{s}'",
                null => "Null value",
                _ => "Other type"
            };
            Console.WriteLine(description);
        }
    }
}
OutputSuccess
Important Notes

Switch expressions are expressions, so they return a value directly.

Patterns can be combined with and, or, and not for more complex checks.

Always include a catch-all _ pattern to handle unexpected cases.

Summary

Switch expressions with patterns let you match values and types cleanly.

They help replace long if-else chains with clearer code.

Patterns can check types, values, and conditions easily.

Practice

(1/5)
1. What does a switch expression with patterns in C# primarily help you do?
easy
A. Create loops that run a fixed number of times
B. Declare variables with dynamic types
C. Match values and types cleanly without long if-else chains
D. Handle exceptions in asynchronous code

Solution

  1. Step 1: Understand switch expressions

    Switch expressions allow matching on values or types in a concise way.
  2. Step 2: Compare with if-else chains

    They replace long if-else chains with clearer, more readable code.
  3. Final Answer:

    Match values and types cleanly without long if-else chains -> Option C
  4. Quick Check:

    Switch expressions = clean matching [OK]
Hint: Switch expressions simplify matching values and types [OK]
Common Mistakes:
  • Confusing switch expressions with loops
  • Thinking switch expressions handle exceptions
  • Believing switch expressions declare variables
2. Which of the following is the correct syntax for a switch expression with a type pattern in C#?
easy
A. var result = obj switch { int i => i * 2, string s => s.Length, _ => 0 };
B. var result = switch obj { int i => i * 2, string s => s.Length, _ => 0 };
C. var result = obj { int i => i * 2, string s => s.Length, _ => 0 } switch;
D. var result = obj switch (int i => i * 2, string s => s.Length, _ => 0);

Solution

  1. Step 1: Identify correct switch expression syntax

    The switch expression syntax is: variable switch { pattern => result, ... }.
  2. Step 2: Match options to syntax

    var result = obj switch { int i => i * 2, string s => s.Length, _ => 0 }; matches this syntax exactly with type patterns and a discard pattern.
  3. Final Answer:

    var result = obj switch { int i => i * 2, string s => s.Length, _ => 0 }; -> Option A
  4. Quick Check:

    Correct switch expression syntax = var result = obj switch { int i => i * 2, string s => s.Length, _ => 0 }; [OK]
Hint: Remember: variable switch { patterns } is correct syntax [OK]
Common Mistakes:
  • Placing switch before the variable
  • Using parentheses instead of braces
  • Misplacing the switch keyword
3. What is the output of the following C# code?
object value = 5;
string result = value switch
{
  int i when i > 0 => "Positive integer",
  int i when i < 0 => "Negative integer",
  string s => "String",
  _ => "Unknown"
};
Console.WriteLine(result);
medium
A. Negative integer
B. Positive integer
C. String
D. Unknown

Solution

  1. Step 1: Analyze the switch expression input

    The variable 'value' is an object holding the integer 5.
  2. Step 2: Match patterns in order

    First pattern matches int i when i > 0, which is true for 5, so result is "Positive integer".
  3. Final Answer:

    Positive integer -> Option B
  4. Quick Check:

    5 > 0 matches first pattern [OK]
Hint: Check pattern order and conditions carefully [OK]
Common Mistakes:
  • Ignoring the 'when' condition
  • Assuming string pattern matches first
  • Choosing default case incorrectly
4. Identify the error in this switch expression code snippet:
object obj = "hello";
var output = obj switch
{
  int i => i.ToString(),
  string s => s.ToUpper(),
  default => "none"
};
medium
A. Patterns must be in parentheses
B. Missing semicolon after switch expression
C. Cannot switch on object type
D. Using 'default' instead of '_' for discard pattern

Solution

  1. Step 1: Check switch expression patterns

    In C# switch expressions, the discard pattern uses '_' not 'default'.
  2. Step 2: Identify the incorrect pattern usage

    The code uses 'default' which causes a syntax error; it should be '_'.
  3. Final Answer:

    Using 'default' instead of '_' for discard pattern -> Option D
  4. Quick Check:

    Discard pattern = '_' not 'default' [OK]
Hint: Use '_' for default case in switch expressions [OK]
Common Mistakes:
  • Using 'default' keyword in switch expressions
  • Confusing switch statements with switch expressions
  • Forgetting to end statements with semicolon
5. Given a list of objects, write a switch expression that returns:
- "Number" if the object is an int or double
- "Text" if the object is a non-empty string
- "Empty" if the object is an empty string
- "Other" for anything else

Which of the following switch expressions correctly implements this logic?
hard
A. obj switch { int _ or double _ => "Number", string s when s.Length == 0 => "Empty", string s when s.Length > 0 => "Text", _ => "Other" }
B. obj switch { int or double => "Number", string s when s == "" => "Empty", string s when s != "" => "Text", _ => "Other" }
C. obj switch { int or double => "Number", string s when s.Length > 0 => "Text", string s when s.Length == 0 => "Empty", _ => "Other" }
D. obj switch { int or double => "Number", string s when s != "" => "Text", string s when s == "" => "Empty", _ => "Other" }

Solution

  1. Step 1: Understand type patterns and conditions

    We must match int or double first, then string with length checks for empty/non-empty.
  2. Step 2: Check order and conditions

    obj switch { int _ or double _ => "Number", string s when s.Length == 0 => "Empty", string s when s.Length > 0 => "Text", _ => "Other" } correctly checks int or double, then string with Length == 0 for "Empty", then Length > 0 for "Text", then default.
  3. Final Answer:

    obj switch { int _ or double _ => "Number", string s when s.Length == 0 => "Empty", string s when s.Length > 0 => "Text", _ => "Other" } -> Option A
  4. Quick Check:

    Order and conditions matter in switch patterns [OK]
Hint: Order patterns from specific to general, check string length for empty [OK]
Common Mistakes:
  • Using 'or' incorrectly without parentheses
  • Checking string emptiness with == "" instead of Length
  • Placing empty string check after non-empty
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