在 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;
}
}
}

特性说明

  1. case 标签:每个 case 标签对应一个要匹配的值。
  2. break 语句:如果匹配成功,执行相应的代码块。break 语句防止执行流进入下一个 case 块(即防止“贯穿”现象)。
  3. 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 语句中的表达式必须是可比较的(如 intstringEnum 等)。
  • 每个 case 块通常应以 break 语句结束,以避免执行流进入下一个 case 块。
  • default 块是可选的,但如果表达式不匹配任何 case 标签且没有 default 块,则不执行任何操作。

通过这些用法和特性,switch 语句在 C# 中成为了一种强大且灵活的控制流工具。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部