在 C# 编程的世界里,有时候我们会遇到需要根据对象的不同属性或类型来执行不同操作的情况。
传统的做法可能是使用一系列if-else 语句,但这往往会让代码变得冗长且难以维护。
幸运的是,C# 提供了一个叫做 “模式匹配” 的神奇工具,它就像一把万能钥匙,可以帮助我们更优雅地解决这种问题。
那么,如何在 C# 使用模式匹配简化if-else 语句呢?
让我们一起来探索吧!
在 C# 中,模式匹配是一种强大的语法特性,让你可以在处理对象时更加灵活,允许你根据对象的类型、结构或值来决定执行什么样的操作。
简单来说,就是看一下你的数据类型,如果符合某种模式,就执行特定的代码。
C# 7.0 引入了基础的模式匹配,而 C# 9.0 和后续版本中则增强了这项功能,支持多种类型的模式匹配,包括常量模式、类型模式、属性模式等。
现在,模式匹配已经让我们的代码变得更加灵活和强大。
现在,让我们通过一个具体的例子来感受一下模式匹配的魅力吧!
假设我们要编写一个简单的图书管理应用程序,其中有一个方法用于处理不同类型的消息,并根据消息内容执行相应操作。
我们可以使用模式匹配来简化这个过程。
首先,在 VS IDE 中创建一个新的控制台应用程序项目,命名为PatternMatchingDemo
新建一个类文件,在其中定义几个不同的消息类,模拟不同类型的消息
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; }}接下来,在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; }}按 Ctrl+F5 编译并运行程序,你会在控制台看到如下图输出:

恭喜你!你已经成功使用了模式匹配来处理不同类型的消息。是不是感觉特别简单又有趣呢?
模式匹配能够减少嵌套和重复代码,让代码逻辑更加清晰,而且,它的语句通常比传统的条件语句更直观易懂。
所以,模式匹配非常适合以下几种情况:
当然,没有任何技术是十全十美的,频繁使用模式匹配有可能会带来一些性能开销,所以,建议按需使用这项技术。
作者:小码编匠

C# 工控精选 20+开源项目(含PLC模拟、状态机、高颜值HMI)
.NET 9 + WPF 搭建工业视觉框架 VisionMaster 技术栈全拆解
工业 OCR 实战:C# + Halcon 打造参数可调的印刷字符识别系统
C# 工厂自动化实战:用软PLC + HMI 一体化开发控制系统
别再说 C# 做不了工业视觉!多相机 + 插件架构 + 全流程管控全落地
.NET 9 + Avalonia 实现跨平台 AI 标注工具,一键自动标注 YOLO 目标
.NET 10 打造一个极简开源的电子白板(全程 AI 辅助开发)
.NET 9 打造的设备监控工具,上线/离线实时提醒,全屏自动静音
C# 实现 Visual Studio 风格的 WinForms 可视化设计器
.NET 10 也能跑 YOLO?用 YoloSharp 轻松实现目标检测
制造业数字化太烧钱?这个基于 WinForm 的开源 MES,轻松省下百万预算
.NET 8 流程可视化框架,支持集脚本执行、自定义节点与流程图设计
轻量级工业温控系统:WinForm + Modbus 落地实践(附数据库)
.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)
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力



