.NET 6新特性试用 | 模式匹配之Extended Property Patterns

前言

模式匹配是一种测试表达式以确定其是否具有某些特征的技术。

例如, 下面的Employee类和Manager类:

public class Employee
{public int Id { get; set; }public string Name { get; set; }public Manager? Manager { get; set; }
}public class Manager : Employee
{public string Position { get; set; }
}

我们可以使用模式匹配,检查Employee实例变量的实际类型并且匹配其属性,如下所示:

Employee obj = new Manager { Id=1, Name="zhangsan", Position="CEO" };
if(obj is Manager { Position: "CEO" } ceo)
{Console.WriteLine(ceo.Name);
};

Extended Property Patterns

如果要使用模式匹配检查变量嵌套的属性,则书写起来比价复杂,如下所示:

if(obj is Employee { Manager: { Name:"lisi", Manager:{ Position: "CEO" } } } employee)

而在.NET 6中,我们可以使用.引用属性的嵌套成员,这种方式称为Extended Property Patterns(扩展属性模式)

将上面的代码改写后如下:

if(obj is Employee { Manager.Name:"lisi", Manager.Manager.Position: "CEO" } employee)

另外,使用扩展属性模式不仅可以引用类定义的嵌套属性,同时还可以使用嵌套属性原生类型的属性,如下所示:

if(obj is Employee { Manager.Name.Length:4 } employee)

结论

需要注意的是,如果变量的Manager属性为null,或者任何嵌套属性为null 都不会得到NullReferenceException。因为在这里编写模式是为了检查对象是否匹配,而不是使用代码直接访问该属性。

这意味着,如果Manager属性为null,则模式{Manager.Name:"lisi"}不匹配,则上面if语句的条件计算结果为false,仅此而已。

利用Extended Property Patterns这种简化的语法,可以使模式匹配表达式更易于阅读,特别是对于嵌套较深的类型。

如果你觉得这篇文章对你有所启发,请帮忙点个或者在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Nagios监控esx、esxi、vcenter

系统环境:Centos6.3 最小化安装环境准备yum install –y libxml2-devel make gcc1、安装前准备 (1)创建nagios用户和用户组 [rootlocalhost ~]#useradd -s /sbin/nologin nagios [rootlocalhost ~]#mkdir /usr/local/nagios [rootlocalhost ~…

Android之在window下面开发常用的adb命令(不断更新)

window下面开发常用的adb命令 1、查看设备 adb devices 2、安装APK adb install -r 安卓apk的路径 3、查看日志E等级以上 adb logcat *:E; 4、过滤"result" tag日志 adb logcat | findStr "result" 5、过滤"result"tag日志…

计算机广告制作未来发展还行吗,计算机多媒体设计专业和广告设计制作那个好...

技校网专门为您推荐的类似问题答案问题1:计算机多媒体技术和广告设计与制作哪个专业好计算机多媒体涵盖范围广。广告与制作就业前景好。如果想学更多东西的话选择计算机多媒体。包含广告设计。问题2:计算机应用,广告设计与制作,网络技术,多媒体技术哪个好…

Composer快速入门

什么是Composer Composer 是PHP的一个依赖管理工具。你可以在你的项目里声明你依赖的库,然后Composer会帮你解决以下问题:找到这些库以及这些库所依赖的库可以安装的版本,然后进行安装。所以Composer是一个依赖管理工具,而不是一个…

龙芯上市是自主路线被广泛认可的风向标

日前,龙芯通过科创板上市委员会审核,此次计划募资35.12亿元。其中,12.58亿元用于先进制程芯片研发及产业化项目,10.54亿元用于高性能通用图形处理器芯片及系统研发项目;12亿元用于补充流动资金。公开材料还披露了很多细…

“批判”按劳取酬

“批判”按劳取酬<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Jack zhai按劳取酬的意思就是付出多少劳动&#xff0c;就获得多少报酬&#xff1b;这曾经是我认为最为合理的老板与员工之间的合约关系。然而近几年&#xff0c;…

携程编程大赛 (预赛第二场)第一题【剪刀石头布】

Problem Description现有M个人一起玩剪刀石头布&#xff0c;以1&#xff0d;M编号&#xff0c;每人出一种&#xff0c;出过不再改变&#xff0c;但是我们并不知道它到底是哪一种。 &#xff08;其中石头赢剪刀&#xff0c;剪刀赢布&#xff0c;布赢石头&#xff0c;一样则平&am…

AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto

正如in Gradle projects,always usehttp://schemas.Android.com/apk/res-auto for custom attributes所说的 将eclipse中 http://schemas.android.com/apk/res/com.xxx.xxx 换成 http://schemas.android.com/apk/res-auto 这样Gradle就会自动查找自定属性的

量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...

贝尔实验室的科学家索尔&#xff0c;自从在1994年35界计算科学基础年会上提出量子算法后&#xff0c;立刻引起全世界科学界的轰动&#xff0c;量子计算机的研究热潮自此到来。量子计算机的运行方式以及存储计算方式&#xff0c;都与经典计算机存在着很大不同。经典计算机的存储…

.NET 现代化动态 LINQ 库 Gridify

动态 LINQ大家好&#xff0c;我是等天黑, 这次继续介绍开源项目&#xff0c;Gridify 是一个现代化动态 LINQ 库&#xff0c;它以最简单的方式将您的字符串转换为 LINQ 查询&#xff0c;并且有出色的性能。它还提供了一种使用基于文本的数据应用过滤、排序和分页的简单方法&…

Android之Toolbar的三个问题:修改左边箭头颜色、怎样修改右边以及子activity中的toolbar添加返回箭头

1&#xff09;怎样修改左边这个小箭头的颜色&#xff1f;2&#xff09;怎样修改右边这三个点的颜色、怎样把这三个点替换成我自己的图标&#xff1f;3&#xff09;怎样让“交易清单”这4个字居中显示&#xff1f; 首先设置Theme为AppCompat.NoActionBar。 (1)toolbar可以通过设…

brew mysql 添加修改mysql配置

为什么80%的码农都做不了架构师&#xff1f;>>> brew安装的MySQL是没有默认配置文件的&#xff0c;因此Mysql使用默认配置启动。我们需要手动创建my.cnf去覆盖默认配置。在/usr/local/opt/mysql 下确实有 my.cnf 但是并没有在启用中&#xff0c;应该是作为一个示例…

微型计算机名词术语,微型计算机及接口技名词解释题及解答题.doc

微型计算机及接口技名词解释题及解答题微处理器&#xff1a;由一片或几片大规模集成电路组成的中央处理器。主要部件&#xff1a;由运算器、控制器、寄存器组组成。微型计算机&#xff1a;以微处理器为基础&#xff0c;配以内存储器以及I/O接口电路和相应的辅助电路构成的裸机。…

LINUX BASH SHELL,小小学习一下

注意点要注意的&#xff1a; 整数运算一般通过 let 和 expr 这两个指令来实现&#xff0c;如对变量 x 加 1 可以写作&#xff1a;let "x $x 1" 或者 xexpr $x 1 两个比较表格要记得&#xff1a; 对应的操作 整数操作 字符串操作 相同 -eq 不同 -ne ! 大…

“人肉”背后隐藏的网络风险

“遭此不幸”的演艺界大碗包括 Jay-Z、碧昂斯 (Beyonce)、布兰妮。斯皮尔斯 (Britney Spears) 以及金。卡戴珊 (Kim Kardashian) 等&#xff0c;他们的个人信息被公诸于众。此外&#xff0c;这次泄露事件的受害者甚至包括美国第一夫人米歇尔。奥巴马 (Michelle Obama)、副总统乔…

数学系都是怎么发「新年祝福」的?

全世界只有3.14 % 的人关注了爆炸吧知识过年啦&#xff01;你都收到什么样的祝福&#xff1f;&#xff08;快到留言区留言&#xff09;不过看来看去&#xff0c;还是超模君曾经收到的一条祝福最特别了&#xff01;超模君今天把这份新年祝福分享给大家&#xff1a;长按图片可保存…

NET 6 中新增的LINQ 方法

.NET 6 中添加了许多 LINQ 方法。下表中列出的大多数新方法在 System.Linq.Queryable 类型中具有等效方法。欢迎关注如果你刻意练习某件事情请超过10000小时&#xff0c;那么你就会达到世界级别今晚打老虎TryGetNonEnumeratedCount 尝试在不强制枚举的情况下确定序列中的元素数…

Android之startService与bindService的区别

Android执行Service有两种方法&#xff0c;一种是startService&#xff0c;一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别 执行startService时&#xff0c;Service会经历onCreate->onStartCommand。当执行stopService时&…