快速测试表达式是否具有某一特性:C# 中的模式匹配

C# 中的模式匹配

模式匹配是测试表达式是否具有某一特性的方法。C# 提供了非常简洁优雅的语法用于匹配模式并在匹配时执行相应的操作。

检查匹配

模式匹配最高频的场景是确保值不为 null。

public void IsMatch(int? number) { if (number is int n) { Console.WriteLine(#34;参数 ‘number’ 具有值{n}”); } else { Console.WriteLine(“参数值为null”); } }

上述代码使用 is 检查 number 是否有值,若有,则赋给新变量 n。注意,新变量仅在 if 语句块中有效。

离散值匹配

检查参数是否等于指定的值。支持的类型包括字符串和枚举,从 C# 11 开始,还支持 Span 和 ReadOnlySpan。

public string ConstantMatch(string? name) => name switch { “张三” => “我是张三”, “李四” => “我是李四”, _ => #34;我不知道自己是谁” }; public string ConstantMatch(ReadOnlySpan name) => name switch { “张三” => “我是张三”, “李四” => “我是李四”, _ => #34;我不知道自己是谁” };

上面的代码,根据 type 参数的值来返回不同的字符串。弃用符号 _ 表示未在类表中定义的任意其它值,包括 null。

类型匹配

模式匹配的另一用途是检查值是否与给定类型匹配。

public string TypeMatch(Animal? animal) => animal switch { Cat => “发现喵咪一只”, Dog => “发现汪汪一只”, null => “毛都没发现”, _ => #34;发现不知道是啥的一个东西” };

上面的代码,根据 animal 参数的实际类型返回不同的字符串。弃元符号 _ 表示未列出的任意其它值。

关系匹配

关系匹配可以将数值与常量进行比较。

public string RelationalMatch(int age) => age switch { “婴儿”, “幼儿”, “儿童”, “少年”, _ => “成年” };

上述代码根据 age 的值大小返回不同的值。弃元符号 _ 表示未列出的任意其它值。

关系匹配模式还可以使用 and 和 or 来组合条件。

public static string GetWaterState(int temperature) => temperature switch { (> 0) and ( “液体”, “固体”, > 100 => “气体”, 0 => “固体/液体临界点”, 100 => “液体/气体临界点”, };

属性匹配

还可以对指定对象的属性进行匹配,可以实现多个参数同时检查。

public record Order(int Items, decimal Cost); public decimal CalculateDiscount(Order order) => order switch { (Items: > 10, Cost: > 1000.00m) => 0.10m, (Items: > 5, Cost: > 500.00m) => 0.05m, Order { Cost: > 250.00m } => 0.02m, null => throw new ArgumentNullException(nameof(order)), var someObject => 0m, };

上面的代码中,前两项检查 Items 和 Cost 属性的值。第三项只检查了 Cost 属性的值。第四项检查是否为 null,第五项匹配任意其它值。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年7月11日
下一篇 2022年7月11日

相关推荐

  • 老板不懂代码,如何防止程序员跑路或代码泄漏

    老板不懂代码,如何防止程序员跑路或代码泄漏 很多企业或老板辛苦发钱开发的程序,如何防止泄漏或程序员泄漏跑路,预防这个我们首先要思考,我们平时怎么做的,要知道,没有无缘无故的“爱”,…

    2022年6月27日
  • 新能源车巨头争相布局换电模式 产业链上下游合力推动标准加速落地

    本报记者 李春莲 随着新能源汽车保有量不断创新高,充电补能方式也越来越多元化。除了电池续航的增长,换电模式由于效率高等优势也迎来风口。 8月1日,首座蔚来与壳牌合作的充换一体站上线…

    2022年8月7日
  • 如何写一份好的bp(商业计划书)

    现在很多人都在写商业计划书,那么如何写一份好的bp呢?今天小编为大家具体的讲一讲,希望能够对大家有所帮助。 如何写一份好的bp(商业计划书) 1、商业计划书从项目背景到财务预算都做…

    2022年5月16日
  • 科思科技:智能无线电基带处理芯片目前处于封装测试阶段

    科思科技在互动平台回答投资者提问时表示,公司的智能无线电基带处理芯片目前处于封装测试阶段,公司正在积极推进各项测试工作,芯片具体情况请关注公司的后续相关公告。

    2022年7月9日
  • 排尿很黄、异味很大?身体向你暗示的这4件事,一定要留意

    “快撒尿,往碗里撒。” 刘大爷今年78、9岁了,有个5岁的重孙子,因为放暑假所以一直待在家里。 一次偶然的机会,刘大爷看见自己5岁的重孙子尿液澄净,便动了动心思。 想起朋友圈看到的…

    2022年9月20日
  • 天龙:52万打包4个不绑定重楼,33万卡级少林同等级单挑第一

    说起如今卡级玩家,大家最先想到的,一定是最近火爆全天龙的卡级服【少年游】,尤其是少年游第一人顾恒,同时也是第一绝情谷,那简直是网红级天龙玩家。 但是你要说,顾衡就是天龙最牛的卡69…

    2022年6月30日
  • 这些常用快捷键,你都会用吗?

    【这些常用快捷键,你都会用吗?】①按住windows键后,再按L键,电脑直接锁屏;②Windows键加D键,桌面闪现;③Windows + R输入osk,出现炫酷虚拟键盘;④Ctr…

    2022年6月14日
  • 山东专升本的上岸历程

    我承认我是个又笨又事儿的人,今天突然回想起备考期间发生的许多事情,就忍不住想写出来,跟你们说一说,也不怕被你们笑话。我挺喜欢篮球的,一直觉得曼巴精神可以带领我每天早起学习,用功读书…

    2022年5月10日
  • 陈坤不再沉默,面对谣传首次回应儿子生母,众多女明星无辜背锅

    他是我见过的娱乐圈里最特别的男演员,和许多女明星之间有着难以形容的关系。他曾经在活动现场当众亲吻李冰冰,在某节目中和林心如关系密切,最让人不可思议的是他与影后周迅维持了长达20年的…

    2022年7月8日
  • 星汉灿烂:困于王延姬密室中的剧情里,凌不疑是真的很绿茶

    《星汉灿烂》大结局后,很多人化身Wendy,都觉得太过分了,连场婚礼都没有,这也太不像话了。 虽然没有婚礼吧,但对于分手五年的男女主来说,能够重新在一起已经是相当地不容易。 说到男…

    2022年8月25日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息