在 C# 中,switch 语句用于基于表达式的值执行不同的代码块。switch 语句类似于一系列 if-else 语句,但通常更简洁、易读。以下是 switch 语句的基本用法和一些高级特性。
基本用法
csharp复制代码
using System; | |
class Program | |
{ | |
static void Main() | |
{ | |
int day = 3; | |
switch (day) | |
{ | |
case 1: | |
Console.WriteLine("Monday"); | |
break; | |
case 2: | |
Console.WriteLine("Tuesday"); | |
break; | |
case 3: | |
Console.WriteLine("Wednesday"); | |
break; | |
case 4: | |
Console.WriteLine("Thursday"); | |
break; | |
case 5: | |
Console.WriteLine("Friday"); | |
break; | |
case 6: | |
Console.WriteLine("Saturday"); | |
break; | |
case 7: | |
Console.WriteLine("Sunday"); | |
break; | |
default: | |
Console.WriteLine("Invalid day"); | |
break; | |
} | |
} | |
} |
特性说明
case标签:每个case标签对应一个要匹配的值。break语句:如果匹配成功,执行相应的代码块。break语句防止执行流进入下一个case块(即防止“贯穿”现象)。default标签:如果表达式的值不匹配任何case标签,则执行default块的代码。default标签是可选的。
高级用法
1. switch 表达式(C# 8.0 及以上)
从 C# 8.0 开始,switch 语句也可以用作表达式,返回一个值。
csharp复制代码
using System; | |
class Program | |
{ | |
static void Main() | |
{ | |
int day = 3; | |
string dayName = day switch | |
{ | |
1 => "Monday", | |
2 => "Tuesday", | |
3 => "Wednesday", | |
4 => "Thursday", | |
5 => "Friday", | |
6 => "Saturday", | |
7 => "Sunday", | |
_ => "Invalid day" | |
}; | |
Console.WriteLine(dayName); | |
} | |
} |
2. 模式匹配(C# 7.0 及以上)
C# 7.0 引入了模式匹配,可以在 switch 语句中使用 when 子句进行更复杂的条件判断。
csharp复制代码
using System; | |
class Program | |
{ | |
static void Main() | |
{ | |
object obj = "Hello"; | |
switch (obj) | |
{ | |
case int i: | |
Console.WriteLine($"Integer: {i}"); | |
break; | |
case string s when s.Length > 5: | |
Console.WriteLine($"Long string: {s}"); | |
break; | |
case string s: | |
Console.WriteLine($"Short string: {s}"); | |
break; | |
default: | |
Console.WriteLine("Unknown type"); | |
break; | |
} | |
} | |
} |
3. 多个 case 标签合并
从 C# 7.0 开始,你可以合并多个 case 标签。
csharp复制代码
using System; | |
class Program | |
{ | |
static void Main() | |
{ | |
int day = 6; | |
switch (day) | |
{ | |
case 6: | |
case 7: | |
Console.WriteLine("Weekend"); | |
break; | |
case 1: | |
case 2: | |
case 3: | |
case 4: | |
case 5: | |
Console.WriteLine("Weekday"); | |
break; | |
default: | |
Console.WriteLine("Invalid day"); | |
break; | |
} | |
} | |
} |
注意事项
switch语句中的表达式必须是可比较的(如int、string、Enum等)。- 每个
case块通常应以break语句结束,以避免执行流进入下一个case块。 default块是可选的,但如果表达式不匹配任何case标签且没有default块,则不执行任何操作。
通过这些用法和特性,switch 语句在 C# 中成为了一种强大且灵活的控制流工具。



















