c# .net switch用法

ops/2024/10/18 10:01:34/

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


http://www.ppmy.cn/ops/126448.html

相关文章

[权威出刊|稳定检索]2024年云计算、大数据与计算机应用技术国际会议(CCBDCAT 2024)

2024年云计算、大数据与计算机应用技术国际会议 2024 International Conference on Cloud Computing, Big Data, and Computer Application Technology 【1】大会信息 会议名称:2024年云计算、大数据与计算机应用技术国际会议 会议简称:CCBDCAT 2024 大…

git基础操作

“git” 文章目录 文章有误敬请斧正 不胜感恩! Git分布式版本控制工具1.目标:2.概述:3.git3.1git基本操作:常用命令配置git环境:git config --global创建本地空仓库:新建文件添加到本地仓库:git add、git commit -m添加到暂存区提…

k8s-NFS系统配置

NFS(network filesystem),nfs文件系统在k8s中主要用于持久化存储,可以被多个pod访问和共享数据。 特点 1、数据持久性 nfs为k8s的pod提供了一种持久化数据的方式,即使pod被删除,数据也不会丢失,这是因为数据存在nfs服务…

docker run和docker start的区别

docker run 和 docker start 是 Docker 中两个常用的命令,它们之间的区别主要在于以下几点: 1. **docker run**: - docker run 命令用于创建并启动一个新的容器。 - 当你运行 docker run 命令时,Docker 会在后台创建一个新…

在电脑上免费分区的 5 个有效磁盘分区软件工具

磁盘分区可能是一个脆弱而复杂的过程,磁盘崩溃或用户设备受到病毒攻击的风险很高。因此,它们很难由用户单独或手动管理。本文详细介绍了可以帮助简化磁盘分区过程的不同软件工具、它们的功能和优点。那么让我们开始吧。 什么是磁盘分区工具? …

Java 各种规则引擎

在软件开发中,经常会遇到需要根据不同的条件执行不同的业务逻辑的情况。为了提高代码的可维护性和灵活性,规则引擎应运而生。本文将详细介绍 Java 中的各种规则引擎,包括其概念、特点、使用场景以及示例。 一、规则引擎概述 (一&a…

Dmitri Shuralyov的全职开源之旅

本篇内容是根据2017年7月份Full-time Open Source 音频录制内容的整理与翻译 Dmitri Shuralyov 加入节目,谈论作为开源的全职贡献者、开发开发人员工具以及其他有趣的 Go 项目和新闻。 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. Erik St. Martin: 欢迎…

WorkFlow GO-Task 源码分析

WorkFlow GO-Task 源码分析 前言 任何好的框架的设计都是围绕着一个核心思想去展开,sylar的一切皆协程、muduo的one loop per thread等。一切皆是任务流就是workflow的精髓。(PS,目前作者功力尚浅,许多设计细节还未能悟透其用意…