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

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

相关推荐
only_Klein17 分钟前
mysql双机热备(主主模式)
数据库·mysql·adb
共享家952741 分钟前
MySQL-内置函数
数据库·mysql
得意霄尽欢1 小时前
MySQL底层数据结构与算法浅析
数据库·mysql
叫我阿柒啊1 小时前
Java全栈工程师的面试实战:从技术细节到业务场景
java·数据库·spring boot·微服务·vue·全栈开发·面试技巧
1688red1 小时前
openEuler系统实现MySQL数据库主从复制
数据库·mysql
祢真伟大2 小时前
dm8_静默安装简单快速
数据库
甄天2 小时前
SQL-Server分页查询多种方法讲解以及分页存储过程
数据库·sql
老华带你飞4 小时前
校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·小程序·毕设·校园二手书交易管理系统
爱思德学术4 小时前
中国计算机学会(CCF)推荐学术会议-B(数据库/数据挖掘/内容检索):EDBT 2026
大数据·数据库·数据管理
界面开发小八哥4 小时前
DevExpress WinForms中文教程:Data Grid - Excel样式的自定义过滤器对话框
ui·.net·excel·界面控件·winform·devexpress·ui开发