使用 C# 模式匹配switch,告别难以维护的 if-else 语句
创作时间:
作者:
@小白创作中心
使用 C# 模式匹配switch,告别难以维护的 if-else 语句
引用
1
来源
1.
http://bbs.clicksun.com.cn/mis/bbs/showbbs.asp?id=27685
在C#编程中,模式匹配是一种强大的语法特性,可以让你在处理对象时更加灵活。它允许你根据对象的类型、结构或值来决定执行什么样的操作。本文将通过一个具体的图书管理应用程序示例,详细展示如何使用模式匹配来替代传统的if-else语句,使代码更加简洁和易于维护。
什么是模式匹配?
在C#中,模式匹配是一种强大的语法特性,让你可以在处理对象时更加灵活,允许你根据对象的类型、结构或值来决定执行什么样的操作。简单来说,就是看一下你的数据类型,如果符合某种模式,就执行特定的代码。
C# 7.0引入了基础的模式匹配,而C# 9.0和后续版本中则增强了这项功能,支持多种类型的模式匹配,包括常量模式、类型模式、属性模式等。现在,模式匹配已经让我们的代码变得更加灵活和强大。
Step By Step 实战例子
现在,让我们通过一个具体的例子来感受一下模式匹配的魅力吧!假设我们要编写一个简单的图书管理应用程序,其中有一个方法用于处理不同类型的消息,并根据消息内容执行相应操作。我们可以使用模式匹配来简化这个过程。
1. 创建一个 .NET Core Console 项目
首先,在VS IDE中创建一个新的控制台应用程序项目,命名为PatternMatchingDemo
2. 定义消息类
新建一个类文件,在其中定义几个不同的消息类,模拟不同类型的消息
namespace PatternMatchingDemo
{
public abstract class MyMessage
{
}
// 定义文本消息类
public class TextMessage : MyMessage
{
public string Content { get; set; }
public TextMessage(string content) => Content = content;
}
// 定义电子邮件消息类
public class EmailMessage : MyMessage
{
public string To { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public EmailMessage(string to, string subject, string body)
{
To = to;
Subject = subject;
Body = body;
}
}
// 定义警告消息类
public class AlertMessage : MyMessage
{
public string Message { get; set; }
public AlertMessage(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>
static void HandleMessage(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等,提取所需信息
- 简化业务逻辑:减少嵌套和重复代码,使逻辑更加清晰
当然,没有任何技术是十全十美的,频繁使用模式匹配有可能会带来一些性能开销,所以,建议按需使用这项技术。
热门推荐
更年期情绪不好怎么办?吃什么食物能舒缓?症状、治疗、保养法解析
年轻人玩的室内游戏(适合年轻人的室内娱乐项目有哪些)
电压互感器(zmpt101b)交流电压采样详解
全国中药饮片带量采购开始(附品种名单)
野火对野生动物的影响
新房过户几年可以免税,了解一下!
五万元投资的最佳策略是什么?这些策略如何平衡风险与回报?
自我提升的10个好习惯,受益一生
彩礼新规解读:彩礼退还新规定,你了解多少?
如何判断两个深度学习数据集的数据分布是否一致
怎么测智商比较准确
调理体质,恢复免疫稳态,中医药治疗类风湿
沟通技巧:客服工作中不可或缺的核心能力
齐国兴衰史:从齐桓公的霸主地位到国家的最终灭亡
如何高效推进重点工作进展?揭秘成功的关键策略
树脂补牙的材料有哪些?了解树脂补牙的常见选择与特点
新手就养这4种花,种子一撒,不打理也能疯狂爆盆
经典棋牌游戏的历史与发展
乳糖不耐受要做哪些检查? 了解乳糖不耐受的检测方法和依据
美国学校如何奖励学生提升学习积极性
发生房屋买卖纠纷该如何处理
守护舌尖安全:食品中化学污染物的检测与控制
【珠海文脉·风物】淇澳端午祈福巡游:传统非遗承载厚重历史,民俗盛事诠释地域文化
女人穿丝袜的真的目的是什么?
水果性价比排行榜,一张表告诉你买啥最划算!
A股突然跳水大跌,发生了什么?刚刚!央行行长潘功胜重磅发声!
除了拨打110,请记住这些报警方式
网络小说调查分析报告
利用人物的思考与内心独白揭示内心世界思考对性格刻画的作用
包装设计心理学:如何通过视觉元素和情感触发设计赢得消费者