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# 中成为了一种强大且灵活的控制流工具。

相关推荐
今晚务必早点睡18 小时前
微服务改数据库密码后服务仍能访问?一次“看似异常、实则常见”的生产现象全解析
数据库·微服务·oracle
老师我太想进步了202620 小时前
cmd连接MySQL及相关查询
数据库·mysql
我是苏苏1 天前
C#高级:使用ConcurrentQueue做一个简易进程内通信的消息队列
java·windows·c#
難釋懷1 天前
Redis命令-Set命令
数据库·redis·缓存
Linux-palpitate1 天前
PostgreSQL(PG)的1主2从集群部署安装
数据库·postgresql
heartbeat..1 天前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
Never_Satisfied1 天前
C#获取汉字拼音字母方法总结
开发语言·c#
山峰哥1 天前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_1 天前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow1 天前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql