首页 > 编程语言 >C# Switch 语句进阶:模式匹配详解与实例演示

C# Switch 语句进阶:模式匹配详解与实例演示

时间:2024-01-24 10:58:37浏览次数:28  
标签:case DayOfWeek return 进阶 C# switch Switch obj string

 

在C#中,switch语句的模式匹配在C# 7.0及以上版本中引入。以下是switch语句中常见的模式及其使用方法的示例:

1. 类型模式:

优点: 用于检查对象的运行时类型,使代码更具可读性。

public static string GetObjectType(object obj)
{
    switch (obj)
    {
        case int i:
            return "整数类型";
        case string s:
            return "字符串类型";
        case double d:
            return "双精度浮点数类型";
        default:
            return "其他类型";
    }
}

2. 常量模式:

优点: 用于匹配对象是否等于某个常量值。

public static string GetDayOfWeekName(DayOfWeek day)
{
    switch (day)
    {
        case DayOfWeek.Monday:
            return "星期一";
        case DayOfWeek.Tuesday:
            return "星期二";
        case DayOfWeek.Wednesday:
            return "星期三";
        case DayOfWeek.Thursday:
            return "星期四";
        case DayOfWeek.Friday:
            return "星期五";
        default:
            return "其他";
    }
}

3. 组合模式:

优点: 允许将多个模式组合在一起,形成更复杂的匹配条件。

public static string GetInfo(object obj)
{
    switch (obj)
    {
        case int i when i > 0:
            return "正整数";
        case int i when i < 0:
            return "负整数";
        case string s when s.Length > 10:
            return "字符串长度大于10";
        default:
            return "其他";
    }
}

4. 属性模式:

优点: 用于匹配对象的属性,提供更灵活的条件判断。

public static string GetPersonInfo(object person)
{
    switch (person)
    {
        case { Age: > 18, Name: "Alice" }:
            return "成年人 Alice";
        case { Age: > 18, Name: "Bob" }:
            return "成年人 Bob";
        case { Age: <= 18, Name: "Alice" }:
            return "未成年人 Alice";
        default:
            return "其他";
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

5. 变量模式:

优点: 允许在模式中引入新的变量,提供更灵活的条件判断。

public static string GetVariablePattern(object obj)
{
    switch (obj)
    {
        case int i when i > 0:
            return $"正整数:{i}";
        case int i when i < 0:
            return $"负整数:{i}";
        case string s:
            return $"字符串:{s}";
        default:
            return "其他";
    }
}
  • 模式匹配使得switch语句更为强大,能够更直观地表达条件逻辑。
  • 不同的模式适用于不同的场景,根据需求选择合适的模式,提高代码的可读性和可维护性。
  • 使用模式匹配可以减少代码中的重复,并提供更灵活的条件判断方式。

 

标签:case,DayOfWeek,return,进阶,C#,switch,Switch,obj,string
From: https://www.cnblogs.com/hanbing81868164/p/17984119

相关文章

  • [CSS]SCSS基本用法
    1.声明变量的符号$2.默认变量!default默认变量在值后面加上!default3.变量调用4.局部变量和全局变量5.嵌套 选择器嵌套、属性嵌套、伪类嵌套6.混合宏@mixin声明混合宏,@include调用混合宏 (理解:写了个方法) 不足:编译的时候会根据不同选择器分别编译,形成冗余......
  • 通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别
    1)通过CanvasRenderer.SetColor和Image.color修改UI组件颜色的区别2)OPPO相关机型没法在Unity启用90或120FPS3)手机输入法中的emoji4)UnityApplicationPatching怎么用这是第369篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面......
  • linux进阶之nmtui和nmcli配置网络
    CentOS7配置网络推荐使用NetworkManager服务(不推荐network服务)。图形化方式:nmtui或Applications->SystemTools->Settings->Network命令方式:->IPv4寻址方式 [X]Automaticallyconnect->默认->自动连接->ONBOOT=yes [X]Availabletoallusers->默认->所有用户均可使用......
  • Jackson+Feign反序列化问题排查
    概述本文记录在使用SpringCloud微服务开发时遇到的一个反序列化问题,RPC/HTTP框架使用的是Feign,JSON序列化反序列化工具是Jackson。问题测试环境的ELK告警日志如下:-[43f42bf7]500ServerErrorforHTTPPOST"/api/open/dialog/nextQuestion"feign.codec.DecodeException:......
  • 服务器上mysql安装 ,以及客户端Navicat连接
    1.官网下载mysql8.0https://dev.mysql.com/downloads/installer/ 2.安装mysql8.0参考https://blog.csdn.net/weixin_47406082/article/details/131867849?ops_request_misc=&request_id=&biz_id=102&utm_term=mysql%E6%9C%80%E6%96%B0%E7%89%88%E5%AE%89%E8%A3%85%E......
  • docker安装pg(postgresql)
    拉取镜像dockerpullpostgres:15.5创建本地卷或创建挂载目录(/docker/postgresql/data)dockervolumecreatepgdata数据卷可以在容器之间共享和重用,默认会一直存在,即使容器被删除(dockervolumeinspectpgdata可查看数据卷的本地位置,如果使用该方式创建可查看创建成功......
  • C#析构函数解析:资源管理的精要和使用技巧
     在C#中,析构函数(Destructor)是一个特殊的方法,用于清理对象占用的资源。它是由垃圾回收器在对象被销毁时自动调用的。析构函数的原理是在对象即将被回收时执行一些清理操作,例如释放非托管资源或执行一些对象销毁前的必要操作。析构函数的基本原理:调用时机: 当对象被垃圾回收......
  • MapStruct+Maven+Lombok问题NoSuchBeanDefinitionException、does not have an access
    概述先直接说我遇到的问题吧,SpringBoot应用启动失败:ERROR|org.springframework.boot.web.embedded.tomcat.TomcatStarter|onStartup|61|-ErrorstartingTomcatcontext.Exception:org.springframework.beans.factory.UnsatisfiedDependencyException.Message:Er......
  • CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南
    一、背景介绍CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案。详细内容可以参考之前文章。有了群体之后,它们被广泛的应用到支付,消金,财富,营销等各种核心业务的用户拉新,交易转化,促活等核心链路中。而人群应用方式......
  • 通过4个任务比较LangChain和LlamaIndex
    我们在本地使用大模型的时候,尤其是构建RAG应用的时候,一般会有2个成熟的框架可以使用LangChain:用开发LLM的通用框架。LlamaIndex:专门用于构建RAG系统的框架。选择一个框架是对于项目的后续开发是非常重要的,因为如果后续更换框架是一个非常困难的事情,所以我们这里对这两个框架......