c# .net switch用法

在 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 语句中的表达式必须是可比较的(如 int、string、Enum 等)。
  • 每个 case 块通常应以 break 语句结束,以避免执行流进入下一个 case 块。
  • default 块是可选的,但如果表达式不匹配任何 case 标签且没有 default 块,则不执行任何操作。

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

相关推荐
mudtools12 分钟前
一份声明,多份产物:飞书 SDK 的 AI 工具面是怎么生成的
人工智能·.net·ai编程
想做小南娘,发现自己是女生喵17 分钟前
LAN Device Monitor 第二周学习文档
java·服务器·数据库
byte轻骑兵20 分钟前
【TextIn xParse + WorkBuddy】把8小时的标书审查压进1小时:招标要求逐条核验与废标风险预警工作台
大数据·数据库·aigc·textin·ai数据层基础设施
云中飞鸿24 分钟前
.Net和C#有什么关系?(从C++视角观察)
开发语言·c#·.net
翔云12345628 分钟前
Gaea(小米MySQL Proxy)整体架构
运维·数据库·mysql
jaysee-sjc34 分钟前
【苍穹外卖】Day10:定时任务与 WebSocket 实时提醒实战
java·开发语言·javascript·数据库·vue.js·websocket·网络协议
牧瀬クリスだ44 分钟前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
瑞克-桑切斯1 小时前
PostgreSQL 14.4 源码部署 & 运维手册(CentOS7)
数据库·学习·postgresql
上海红同电子1 小时前
红同电子线束工厂100问|绝缘护套采购,材质PVC、TPE、PP该如何选型?
数据库·经验分享·职场和发展·产品运营·制造·材质
泡海椒1 小时前
JQuick-SQL “数据源 SPI”辨析:应用适配器与 Function SPI 的正确边界
数据库·驱动开发·sql