.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这种简化的语法,可以使模式匹配表达式更易于阅读,特别是对于嵌套较深的类型。
如果你觉得这篇文章对你有所启发,请帮忙点个赞或者在看
.NET 6新特性试用 | 模式匹配之Extended Property Patterns相关推荐
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...
- JDK 14的新特性:instanceof模式匹配
JDK 14的新特性:instanceof模式匹配 JDK14在2020年的3月正式发布了.可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks ...
- .NET 6新特性试用 | 可空引用类型
前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...
- 5.0 新特性试用体验之 Clustered Index
作者:hzc989 原文来源: https://tidb.net/blog/69dd056c [是否原创]是 [首发渠道]TiDB 社区 [目录] 一.引言 二.基础前情回顾 三.era withou ...
- .NET 6新特性试用 | PeriodicTimer
前言 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.Web.UI.Timer System.Windo ...
- .NET 6新特性试用 | 可写JSON DOM API
前言 我们常用JSON的方式,是将类对象序列化/反序列化: var user = new User { Name = "My IO" }; var json = JsonSeria ...
- .NET 6新特性试用 | SDK工作负载
前言 为了应对.NET SDK能够支持的程序集项目(例如iOS.Android.WASM)的不断增长,从.NET 6开始,允许用户仅安装必要的SDK(例如ASP.NET Core),而不是一次性安装& ...
- .NET 6新特性试用 | LINQ功能改进
前言 .NET6为LINQ添加了多个新API,在本文中,我们将始终使用User类逐一演示这些添加到LINQ中的内容: public class User {public string Name { g ...
- .NET 6新特性试用 | ArgumentNullException卫语句
前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...
最新文章
- 面试常用shell脚本_Shell脚本编写及常见面试题
- Ubuntu使用实录
- 最大期望算法与混合高斯模型的推导
- P3332-[ZJOI2013]K大数查询【树套树】
- 如何测量代码运行时间
- 过去赚钱靠产品—买卖产品
- 安装详细步骤win7_windows安装器怎么安装原版win7【详细教程】
- 隐藏网络计算机,XP电脑如何在网络中隐藏自己的计算机名称?
- AdminLTE-2.4.10源码包
- Linux- Showdown 命令详解
- java打印ascii码_JAVA实现打印ascii码表代码
- [位压] 高精度加法
- 上位机发送与接收下位机数据
- 港媒:梁洛施偷吃排卵药擅生双胞胎 惹怒李泽楷
- 网络连接变成小地球,提示无法访问internet
- 团队融洽之拓展器械拓展训练
- Jquery锚点导航定位、css设置头部左侧固定,右侧内容滚动
- 2015-07-20-struts-struts2简介
- [samba]Samba服务器架设
- Camlytics:智能摄像头监控软件