How to use switch expressions in C#
Switch expressions in C# 8.0+ provide a concise syntax for pattern matching. Unlike switch statements, they return a value directly and use => instead of case and break.
You can use patterns like type patterns, relational patterns, and logical patterns. The underscore serves as a discard pattern, matching anything (similar to default).
Switch expressions are expressions, not statements, so they must return a value and can be used inline or assigned to variables.
C# Example Code
using System;
public class SwitchExpressions
{
public static void Main(string[] args)
{
// Basic switch expression
int dayNumber = 3;
string dayName = dayNumber switch
{
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday",
_ => "Invalid day"
};
Console.WriteLine($"Day {dayNumber}: {dayName}");
// With type patterns
object obj = "Hello";
string result = obj switch
{
int i => $"Integer: {i}",
string s => $"String: {s}",
double d => $"Double: {d}",
_ => "Unknown type"
};
Console.WriteLine(result);
// Relational patterns
int score = 85;
string grade = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
>= 60 => "D",
_ => "F"
};
Console.WriteLine($"Score {score}: Grade {grade}");
// Multiple conditions (logical patterns)
int temperature = 75;
string weather = temperature switch
{
< 32 => "Freezing",
>= 32 and < 50 => "Cold",
>= 50 and < 70 => "Cool",
>= 70 and < 85 => "Warm",
>= 85 => "Hot"
};
Console.WriteLine($"{temperature}°F is {weather}");
// With tuples
string GetQuadrant(int x, int y) => (x, y) switch
{
(> 0, > 0) => "Quadrant I",
(< 0, > 0) => "Quadrant II",
(< 0, < 0) => "Quadrant III",
(> 0, < 0) => "Quadrant IV",
(0, 0) => "Origin",
_ => "On axis"
};
Console.WriteLine($"Point (3, 4): {GetQuadrant(3, 4)}");
Console.WriteLine($"Point (-2, 5): {GetQuadrant(-2, 5)}");
}
}