当前位置:首页>java>C# 模式匹配取代 if-else,代码更简洁易维护

C# 模式匹配取代 if-else,代码更简洁易维护

  • 2026-08-22 15:06:42
C# 模式匹配取代 if-else,代码更简洁易维护

前言

在 C# 编程的世界里,有时候我们会遇到需要根据对象的不同属性或类型来执行不同操作的情况。

传统的做法可能是使用一系列if-else 语句,但这往往会让代码变得冗长且难以维护。

幸运的是,C# 提供了一个叫做 “模式匹配” 的神奇工具,它就像一把万能钥匙,可以帮助我们更优雅地解决这种问题。

那么,如何在 C# 使用模式匹配简化if-else 语句呢?

让我们一起来探索吧!

什么是模式匹配?

在 C# 中,模式匹配是一种强大的语法特性,让你可以在处理对象时更加灵活,允许你根据对象的类型、结构或值来决定执行什么样的操作。

简单来说,就是看一下你的数据类型,如果符合某种模式,就执行特定的代码。

C# 7.0 引入了基础的模式匹配,而 C# 9.0 和后续版本中则增强了这项功能,支持多种类型的模式匹配,包括常量模式、类型模式、属性模式等。

现在,模式匹配已经让我们的代码变得更加灵活和强大。

Step By Step 实战例子

现在,让我们通过一个具体的例子来感受一下模式匹配的魅力吧!

假设我们要编写一个简单的图书管理应用程序,其中有一个方法用于处理不同类型的消息,并根据消息内容执行相应操作。

我们可以使用模式匹配来简化这个过程。

1. 创建一个 .NET Core Console 项目

首先,在 VS IDE 中创建一个新的控制台应用程序项目,命名为PatternMatchingDemo

2. 定义消息类

新建一个类文件,在其中定义几个不同的消息类,模拟不同类型的消息

namespacePatternMatchingDemo{publicabstractclassMyMessage    {    }// 定义文本消息类publicclassTextMessage : MyMessage    {publicstring Content { get; set; }publicTextMessage(string content) => Content = content;    }// 定义电子邮件消息类publicclassEmailMessage : MyMessage    {publicstring To { get; set; }publicstring Subject { get; set; }publicstring Body { get; set; }publicEmailMessage(string to, string subject, string body)        {            To = to;            Subject = subject;            Body = body;        }    }// 定义警告消息类publicclassAlertMessage : MyMessage    {publicstring Message { get; set; }publicAlertMessage(string message) => Message = message;    }}

3. 使用模式匹配处理不同类型的消息

接下来,在Program.cs 文件中使用模式匹配处理不同类型的消息

using PatternMatchingDemo;// 创建不同类型的消息实例var messages = new MyMessage[]{new TextMessage("你好,模式匹配!"),new EmailMessage("example@example.com", "主题", "邮件正文"),new AlertMessage("警告:服务器即将重启")};// 遍历消息数组并处理每个消息foreach (var message in messages){    HandleMessage(message);}///<summary>/// 处理不同类型的消息。///</summary>///<param name="message">要处理的消息对象。</param>staticvoidHandleMessage(MyMessage message){switch (message)    {case TextMessage txtMsg:            Console.WriteLine("处理文本消息: ");            Console.WriteLine(txtMsg.Content);            Console.WriteLine();break;case EmailMessage emailMsg:            Console.WriteLine("处理电子邮件消息: ");            Console.WriteLine($"发送到 {emailMsg.To}, 主题: {emailMsg.Subject}, 正文: {emailMsg.Body}");            Console.WriteLine();break;case AlertMessage alertMsg:            Console.WriteLine("处理警告消息: ");            Console.WriteLine(alertMsg.Message);            Console.WriteLine();break;default:            Console.WriteLine("未知类型的消息");break;    }}

4. 运行程序

按 Ctrl+F5 编译并运行程序,你会在控制台看到如下图输出:

总结

恭喜你!你已经成功使用了模式匹配来处理不同类型的消息。是不是感觉特别简单又有趣呢?

模式匹配能够减少嵌套和重复代码,让代码逻辑更加清晰,而且,它的语句通常比传统的条件语句更直观易懂。

所以,模式匹配非常适合以下几种情况:

  • 多态处理:当你需要根据对象的具体类型执行不同操作时
  • 数据验证:检查对象是否满足特定条件或结构
  • 解析复杂数据结构:如 JSON、XML 等,提取所需信息
  • 简化业务逻辑:减少嵌套和重复代码,使逻辑更加清晰

当然,没有任何技术是十全十美的,频繁使用模式匹配有可能会带来一些性能开销,所以,建议按需使用这项技术。

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

作者:小码编匠

出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
END
方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注【加群】

推荐阅读
.NET 的零界面语音播放服务,工业级语音播报解决方案
面向工厂自动化的智能语音播报方案(基于.NET Windows服务)
C# 轻量、易用、可本地部署的 OCR 标注工具
WPF 实现硬件测试全流程:连接、采集、分析、绘图
C# 工业级流程图控件:轻量、高效、可交互

C# 工控精选 20+开源项目(含PLC模拟、状态机、高颜值HMI)

.NET 9 + WPF 搭建工业视觉框架 VisionMaster 技术栈全拆解

C# + Halcon 打造你的可视化机器视觉流程编辑器

工业机器人轨迹怎么来?这个 C# 工具从 DXF 自动生成

工业 OCR 实战:C# + Halcon 打造参数可调的印刷字符识别系统

C# 工厂自动化实战:用软PLC + HMI 一体化开发控制系统

别再说 C# 做不了工业视觉!多相机 + 插件架构 + 全流程管控全落地

C# 打造自己的 PLC 模拟器:无需硬件也能开发上位机

.NET 9 + Avalonia 实现跨平台 AI 标注工具,一键自动标注 YOLO 目标

.NET 10 打造一个极简开源的电子白板(全程 AI 辅助开发)

.NET 9 打造的设备监控工具,上线/离线实时提醒,全屏自动静音

C# 实现 Visual Studio 风格的 WinForms 可视化设计器

.NET 10 也能跑 YOLO?用 YoloSharp 轻松实现目标检测

制造业数字化太烧钱?这个基于 WinForm 的开源 MES,轻松省下百万预算

WPF 开发可视化流程图设计器,让工控逻辑可执行

.NET 8 流程可视化框架,支持集脚本执行、自定义节点与流程图设计

轻量级工业温控系统:WinForm + Modbus 落地实践(附数据库)

.NET 8 + WPF 打造的数控机床仿真平台

.NET 8 + WPF 的 PLC 点位管理与组合调试工具(Modbus TCP)

.NET 10 + OpenCvSharp 的摄像头无接触生命体征检测

WPF + Prism 模块化工业设备监控与数据采集(SCADA)平台

WPF + HandyControl 的高颜值上位机框架,让工业软件好看又好用

C# + Halcon 实现类 VisionPro 的开源机器视觉平台

.NET 10 + YOLO 的多模型视觉平台:检测、分割、OBB、姿态全支持

一套工业级 WinForm 矢量图形库,搞定组态、仿真中的图形开发

工业级零丢失、高并发 PLC 数据采集系统(支持 .NET 8/10)

工业相机和算法库太多太杂?这个 WPF 视觉平台把它们统一管起来了

.NET 9 + Vue 3 + Three.js  企业级3D场景管理系统

觉得有收获?不妨分享让更多人受益

关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

最新文章

随机文章