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

相关推荐
梦想的旅途212 小时前
企业微信二次开发实战:基于RPA接口的私域中台架构设计与选型指南
数据库·企业微信·rpa
我才是银古12 小时前
当 GIS 开发遇上 .NET:一个 GDAL 集成工具库的架构设计与实践
c#·gis·gdal
许彰午13 小时前
87_Python Django模型与数据库
数据库·python·django
—Miss. Z—13 小时前
计算机二级MySQL选择题考点Ⅱ
数据库·mysql·oracle
敖行客 Allthinker13 小时前
IM 融合专题:后端架构师的核心修炼
java·开发语言·数据库
Hesionberger13 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
翔云12345613 小时前
MySQL 中 CURRENT_TIMESTAMP 到底取的是 INSERT 时间,还是 COMMIT 时间?
数据库·mysql
矜持的左手13 小时前
硬件故障后数据文件大小不对故障处理—Oracle碎片扫描恢复
数据库·oracle
欢呼的太阳21 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
喜欢的名字被抢了1 天前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程