使用 C# 模式匹配,简化难以维护的 if-else 语句

职场成长-9.png

前言

嗨,大家好!

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

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

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

那么,如何在 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 编译并运行程序,你会在控制台看到如下图输出:

159

总结

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

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

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

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

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

好了,今天的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!

最后,如果你有更好的想法或建议,欢迎留言讨论!

往期精彩

  1. 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
  2. C#12 中 5 个节省你开发时间的的改进
  3. C# 静态类,高手不想让你知道的 15 个真相
  4. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  5. 用 C# Stopwatch 计时,让代码性能飞起来!
  6. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  7. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  8. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  9. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  10. C# AutoMapper 10个常用方法总结
  11. C# 7个方法比较两个对象是否相等
  12. C# 去掉字符串最后一个字符的 4 种方法

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号(名称:代码掌控者),更多干货等你来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值