当前位置: 首页 > news >正文

C#上位机--选择语句(switch)

在 C# 上位机开发的广阔领域中,流程控制语句如同程序的 “交通枢纽”,精准地引导着程序的执行路径。继深入探讨if语句后,我们将目光聚焦于另一个重要的流程控制语句 ——switch语句。switch语句以其独特的多路分支结构,为处理多条件判断提供了一种简洁、高效且易读的方式。本文将从基础语法入手,逐步深入到复杂应用场景,并结合实际程序演示,全方位剖析switch语句在 C# 上位机开发中的奥秘。

一、switch 语句基础语法

switch语句基于一个控制表达式的值,从多个分支中选择一个执行。其基本语法结构如下:

switch (控制表达式){case 值1:// 当控制表达式的值等于值1时执行的代码break;case 值2:// 当控制表达式的值等于值2时执行的代码break;// 可以有更多的case分支default:// 当控制表达式的值与所有case值都不匹配时执行的代码break;}

在这个语法结构中,控制表达式是一个返回值的表达式,其类型必须是整数类型(如int、byte、short等)、字符类型(char)、字符串类型(string)或枚举类型。case关键字后面跟着一个常量值,用于与控制表达式的值进行比较。当控制表达式的值与某个case值匹配时,执行该case分支下的代码,直到遇到break语句,跳出switch语句块。如果所有case值都不匹配,将执行default分支下的代码(default分支是可选的)。

例如,在一个简单的设备控制上位机程序中,根据用户输入的数字指令来执行不同的操作:

int command = 2;switch (command){case 1:Console.WriteLine("执行操作1:启动设备");break;case 2:Console.WriteLine("执行操作2:停止设备");break;case 3:Console.WriteLine("执行操作3:重启设备");break;default:Console.WriteLine("无效的指令");break;}

在上述代码中,command是控制表达式,根据其值的不同,执行相应case分支下的操作。如果command的值为 2,就会输出 “执行操作 2:停止设备”。

二、switch 语句的优势与适用场景

相较于if - else if链式结构,switch语句在处理多条件判断时具有以下优势:

  1. 代码简洁性:switch语句的结构更加紧凑,当有多个条件需要判断时,代码看起来更加清晰、简洁,易于维护。
  1. 执行效率:在某些情况下,switch语句的执行效率更高。特别是当条件值是离散的、可枚举的,并且数量较多时,switch语句的内部实现机制可以更快地定位到匹配的分支。
  1. 可读性强:switch语句的语法结构使得代码的逻辑意图一目了然,每个case分支对应一个明确的条件值,便于理解和调试。

switch语句适用于以下场景:

  • 菜单驱动程序:在构建上位机的用户界面菜单时,根据用户选择的菜单项编号执行相应的操作。
  • 状态机实现:用于描述设备或系统的不同状态,根据当前状态值执行不同的行为。
  • 枚举类型处理:当处理枚举类型的数据时,switch语句可以方便地根据枚举值进行不同的操作。

三、switch 语句与枚举类型的完美结合

枚举类型是 C# 中一种非常有用的数据类型,它允许定义一组具名的常量值。switch语句与枚举类型的结合使用,可以使代码更加清晰、类型安全。

首先,定义一个枚举类型来表示设备的不同状态:

enum DeviceStatus{Off,On,Busy,Error}

然后,在switch语句中根据设备状态执行不同的操作:

DeviceStatus status = DeviceStatus.On;switch (status){case DeviceStatus.Off:Console.WriteLine("设备已关闭");break;case DeviceStatus.On:Console.WriteLine("设备已开启");break;case DeviceStatus.Busy:Console.WriteLine("设备正在忙碌中");break;case DeviceStatus.Error:Console.WriteLine("设备出现错误");break;}

通过这种方式,不仅代码的可读性大大提高,而且可以避免因为状态值的错误使用而导致的运行时错误。

四、switch 语句的高级特性

  1. 模式匹配:在 C# 8.0 及以上版本中,switch语句引入了模式匹配功能,使得条件判断更加灵活和强大。模式匹配允许根据不同的数据模式来执行不同的代码块,而不仅仅是基于常量值的比较。

例如,在处理一个包含不同类型数据的集合时,可以使用模式匹配来对不同类型的数据进行不同的操作:

object data = 10;switch (data){case int num when num > 0:Console.WriteLine($"这是一个正整数:{num}");break;case int num when num < 0:Console.WriteLine($"这是一个负整数:{num}");break;case string str:Console.WriteLine($"这是一个字符串:{str}");break;default:Console.WriteLine("未知的数据类型");break;}

在这个例子中,使用了when关键字来添加额外的条件,进一步细化了模式匹配的条件。

  1. 嵌套 switch 语句:与if语句类似,switch语句也可以嵌套使用,以处理更加复杂的逻辑。在嵌套的switch语句中,内层的switch语句可以根据外层switch语句的控制表达式结果进一步进行条件判断。

例如,在一个复杂的设备控制系统中,根据设备类型和设备状态执行不同的操作:

enum DeviceType{Sensor,Actuator}DeviceType deviceType = DeviceType.Sensor;DeviceStatus deviceStatus = DeviceStatus.On;switch (deviceType){case DeviceType.Sensor:switch (deviceStatus){case DeviceStatus.On:Console.WriteLine("传感器已开启,正在采集数据");break;case DeviceStatus.Off:Console.WriteLine("传感器已关闭");break;}break;case DeviceType.Actuator:switch (deviceStatus){case DeviceStatus.On:Console.WriteLine("执行器已开启,正在执行动作");break;case DeviceStatus.Off:Console.WriteLine("执行器已关闭");break;}break;}

五、程序演示

为了更深入地理解switch语句在 C# 上位机开发中的实际应用,我们创建一个完整的上位机程序示例。假设我们正在开发一个工业自动化监控系统,需要根据不同的设备 ID 和操作指令来执行相应的控制操作。

(一)创建项目

在 Visual Studio 中创建一个新的 C# 控制台应用程序项目。

(二)编写代码

using System;class Program{static void Main(){Console.WriteLine("请输入设备ID(1 - 3):");int deviceId = int.Parse(Console.ReadLine());Console.WriteLine("请输入操作指令(start/stop/status):");string command = Console.ReadLine().ToLower();switch (deviceId){case 1:switch (command){case "start":Console.WriteLine("设备1正在启动...");// 这里可以添加实际启动设备1的代码逻辑break;case "stop":Console.WriteLine("设备1正在停止...");// 这里可以添加实际停止设备1的代码逻辑break;case "status":Console.WriteLine("设备1的状态:正常");// 这里可以添加实际获取设备1状态的代码逻辑break;default:Console.WriteLine("无效的操作指令");break;}break;case 2:switch (command){case "start":Console.WriteLine("设备2正在启动...");// 这里可以添加实际启动设备2的代码逻辑break;case "stop":Console.WriteLine("设备2正在停止...");// 这里可以添加实际停止设备2的代码逻辑break;case "status":Console.WriteLine("设备2的状态:忙碌");// 这里可以添加实际获取设备2状态的代码逻辑break;default:Console.WriteLine("无效的操作指令");break;}break;case 3:switch (command){case "start":Console.WriteLine("设备3正在启动...");// 这里可以添加实际启动设备3的代码逻辑break;case "stop":Console.WriteLine("设备3正在停止...");// 这里可以添加实际停止设备3的代码逻辑break;case "status":Console.WriteLine("设备3的状态:错误");// 这里可以添加实际获取设备3状态的代码逻辑break;default:Console.WriteLine("无效的操作指令");break;}break;default:Console.WriteLine("无效的设备ID");break;}}}

(三)运行程序

运行程序后,根据提示依次输入设备 ID 和操作指令。例如,输入设备 ID 为 2,操作指令为 “status”,程序会输出 “设备 2 的状态:忙碌”。通过这个实际的示例,我们可以看到switch语句如何在复杂的工业自动化监控系统中,根据不同的条件实现精准的设备控制和状态查询。

六、总结

switch语句作为 C# 上位机开发中流程控制的重要工具,以其简洁高效的语法结构和强大的功能特性,为开发者提供了一种优雅的多条件判断解决方案。从基础的语法应用到与枚举类型的结合,再到高级的模式匹配和嵌套使用,switch语句在各种场景下都能发挥出巨大的作用。通过本文的详细介绍和实际程序演示,希望你已经对 C# 上位机中的switch语句有了全面而深入的理解。在今后的 C# 上位机开发项目中,能够灵活运用switch语句,提升程序的性能和可读性。。

相关文章:

C#上位机--选择语句(switch)

在 C# 上位机开发的广阔领域中&#xff0c;流程控制语句如同程序的 “交通枢纽”&#xff0c;精准地引导着程序的执行路径。继深入探讨if语句后&#xff0c;我们将目光聚焦于另一个重要的流程控制语句 ——switch语句。switch语句以其独特的多路分支结构&#xff0c;为处理多条…...

Hadoop初体验

一、HDFS初体验 1. shell命令操作 hadoop fs -mkdir /itcast hadoop fs -put zookeeper.out /itcast hadoop fs -ls / 2. Web UI页面操作 结论&#xff1a; HDFS本质就是一个文件系统有目录树结构 和Linux类似&#xff0c;分文件、文件夹为什么上传一个小文件也这…...

在vue2中操作数组,如何保证其视图的响应式

在 Vue 2 中&#xff0c;操作数组时需要注意一些方法不会触发视图的响应式更新。为了确保数组的操作是响应式的&#xff0c;可以使用 Vue 提供的响应式方法。以下是一些常见的操作及其替代方法&#xff1a; 使用 Vue.set 方法&#xff1a; 当你需要通过索引直接修改数组中的某个…...

CentOS的ssh复制文件

1.前提 首先要已经连接上了对方的ssh 2.命令 scp [文件] 目标IP:目标路径 例如&#xff1a; $PWD是一个环境变量&#xff0c;可以获取当前绝对目录&#xff0c;ssh上传的时候一定要确保对方有这个目录才行&#xff0c;不然会报错 3.递归上传 scp -r 目录 目标IP:路径 可以…...

Spring Cloud — Hystrix 服务隔离、请求缓存及合并

Hystrix 的核心是提供服务容错保护&#xff0c;防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式&#xff0c;对资源或失败单元进行隔离&#xff0c;避免一个服务的失效导致整个系统垮掉&#xff08;雪崩效应&#xff09;。 1 Hystrix监控 Hystrix 提供了对服务…...

Vmware虚拟机Ubantu安装Docker、k8s、kuboard

准备工作: 切换用户&#xff1a;su root关闭防火墙: sudo ufw diasble关闭swap: systemctl stop swap.target systemctl status swap.target systemctl disable swap.target #开机禁用 systemctl stop swap.img.swap systemctl status swap.img.swap关闭虚拟交换分区 vim /…...

PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别

如果在 PHP 5.3 的版本以前想要创建MySQL的持久化连接(长连接)&#xff0c;需要显式调用 pconnect 创建&#xff1a; $con mysql_pconnect($server[host], $server[username], $server[password]); if (!($con false)) { if (mysql_select_db($server[database], $con) fals…...

python爬虫系列课程2:如何下载Xpath Helper

python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…...

【Python项目】基于Python的Web漏洞挖掘系统

【Python项目】基于Python的Web漏洞挖掘系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介&#xff1a; Web漏洞挖掘系统是一个基于B/S架构的漏洞扫描平台&#xff0c;旨在通过自动化的方式对网站进行漏洞检测。系统主要功…...

多环境日志管理:使用Logback与Logstash集成实现高效日志处理

多环境日志管理&#xff1a;使用Logback与Logstash集成实现高效日志处理 在现代软件开发中&#xff0c;有效的日志管理是至关重要的。无论是调试问题、监控应用性能还是审计用户活动&#xff0c;良好的日志策略都能大大提高工作效率。本文将详细介绍如何配置Spring Boot项目以…...

idea连接gitee(使用idea远程兼容gitee)

文章目录 先登录你的gitee拿到你的邮箱找到idea的设置选择密码方式登录填写你的邮箱和密码登录成功 先登录你的gitee拿到你的邮箱 具体位置在gitee–>设置–>邮箱管理 找到idea的设置 选择密码方式登录 填写你的邮箱和密码 登录成功...

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...

飞书API

extend目录下,API <?php // ---------------------------------------------------------------------- // | 飞书API // ---------------------------------------------------------------------- // | COPYRIGHT (C) 2021 http://www.jeoshi.com All rights reserved. …...

深入解析 Hydra 库:灵活强大的 Python 配置管理框架

深入解析 Hydra 库&#xff1a;灵活强大的 Python 配置管理框架 在机器学习、深度学习和复杂软件开发项目中&#xff0c;管理和维护大量的配置参数是一项具有挑战性的任务。传统的 argparse、json 或 yaml 方式虽然能管理部分配置&#xff0c;但随着项目规模的增长&#xff0c…...

【开源免费】基于Vue和SpringBoot的失物招领平台(附论文)

本文项目编号 T 243 &#xff0c;文末自助获取源码 \color{red}{T243&#xff0c;文末自助获取源码} T243&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal

三个IP 你的笔记本电脑中有三个IP&#xff1a;127.0.0.1、无线网 IP 和局域网 IP。 在不同的场景下&#xff0c;需要选用不同的 IP 地址&#xff0c;如下为各自的特点及适用场景&#xff1a; 127.0.0.1&#xff08;回环地址&#xff09; 特点 127.0.0.1 是一个特殊的 IP 地…...

测试WSS服务器

必须有域名&#xff0c;证书也是强制关联这个域名&#xff0c;阿里云、腾讯云、百度云都可以申请免费的证书&#xff0c;外网对应的主机要备案到域名 备案&#xff1a;是针域名下的主机备案&#xff0c;不备案的话&#xff0c;会强制断网 这个网站可以测试本地WSS连接 ​​​​…...

unity学习49:寻路网格链接 offMeshLinks, 以及传送门效果

目录 1 网格链接 offMeshLinks 功能入口 1.1 unity 2022之前 1.2 unity 2022之后 2 网格链接 offMeshLinks 功能设置 3 点击 offMeshLinks 功能里的bake 3.1 unity 2022之前 3.2 unity 2022之后 3.3 实测link 3.4 跳跃距离增大&#xff0c;可以实现轻功类的效果 4 …...

Web 开发中的 5 大跨域标签解析:如何安全地进行跨域请求与加载外部资源

在 Web 开发中,跨域(Cross-Origin)是指从一个源(协议、域名、端口)访问另一个源的资源。以下是5个常见的用于跨域操作的 HTML 标签,它们主要用于跨域请求或加载外部资源:1. <script> 标签 用途:最常用于进行跨域请求的标签,特别是在 JSONP 技术中。浏览器允许通…...

UMLS数据下载及访问

UMLS数据申请 这个直接在官网上申请即可&#xff0c;记得把地址填全&#xff0c;基本都会拿到lisence。 UMLS数据访问 UMLS的数据访问分为网页访问&#xff0c;API访问以及数据下载后的本地访问&#xff0c;网页访问&#xff0c;API访问按照官网的指示即可&#xff0c;这里主…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...