.NET6新东西--模式匹配中的Extended Property Patterns

简介: .NET6新东西--模式匹配中的Extended Property Patterns

模式匹配测试的是确定表达式是否具有某些特征的方式。比如我们有Employee和Manager两个类,其中Manager类继承自Employee:

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);
};

在.NET6以前要使用模式匹配来检查变量嵌套的属性的话就比较复杂了,代码如下:

if(obj is Employee { Manager: { Name:"张三", Manager:{ Position: "程序员" } } } employee)

但在.NET6中可以使用引用属性的嵌套成员Extended Property Patterns(扩展属性模式)。我们把前面的代码修改后是这样的:

if(obj is Employee { Manager.Name:"张三", Manager.Manager.Position: "程序" } employee)

使用扩展属性模式不仅仅可以引用类定义的嵌套属性,还可以使用嵌套属性原生类型的属性,代码如下:

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

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


TIP:如果任何嵌套属性为null,都不会出现NullReferenceException异常。这是因为编写模式是为了检查对象是否匹配,而不是使用代码直接访问该属性。这就说明如果Manager属性为null,那么模式{Manager.Name:“张三”}不匹配,上面if语句的条件计算结果就是false。



目录
相关文章
|
7月前
|
SQL 开发框架 数据可视化
企业应用开发中.NET EF常用哪种模式?
企业应用开发中.NET EF常用哪种模式?
108 5
|
7月前
|
SQL 开发框架 数据可视化
企业应用开发中.NET EF常用哪种模式?
企业应用开发中.NET EF常用哪种模式?
|
4月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
53 0
|
2月前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
41 0
|
4月前
|
敏捷开发 设计模式 开发者
【揭秘终极利器】AgileEAS.NET:服务定位器模式的魔法,如何让企业级软件开发瞬间提速?揭秘背后的技术奥秘与实战指南!
【8月更文挑战第16天】AgileEAS.NET是基于DotNet的企业级敏捷开发平台,其服务定位器模式助力构建高度解耦系统。通过全局服务目录动态查找服务,避免硬编码依赖。在AgileEAS.NET中,服务定位器以静态类形式封装服务注册与检索功能。示例展示了如何注册与获取服务实例,如在`UserController`中通过服务定位器使用`IUserService`。此模式整合到框架生命周期管理,便于各处获取服务实例,提升开发效率。然而,应适度使用并考虑依赖注入容器以增强代码可维护性和可测试性。
76 4
|
4月前
|
开发框架 监控 .NET
|
6月前
|
设计模式 存储 编译器
【.NET Core】异步编程模式
【.NET Core】异步编程模式
48 2
|
7月前
|
敏捷开发 缓存 中间件
【专栏】解读.NET 技术的高效开发模式
【4月更文挑战第29天】本文探讨了.NET技术的高效开发模式,关键要素包括面向对象编程、良好架构设计和高效代码管理。通过实例展示了在企业级应用和Web应用开发中如何运用这些原则,强调了分层架构、微服务架构以及遵循编程规范和使用版本控制的重要性。文章旨在为开发者提供.NET开发的实用指南和灵感,促进软件开发效率与质量的提升。
42 0
|
缓存 前端开发 搜索推荐
二级医院检验系统源码,SaaS模式.Net Core版云LIS系统源码
云LIS系统是医院信息管理的重要组成部分之一,集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。云LIS系统不仅是自动接收检验数据,打印检验报告,系统保存检验信息的工具,而且也是医生科研、诊疗的重要参考指标。
173 0
二级医院检验系统源码,SaaS模式.Net Core版云LIS系统源码
|
数据挖掘 Python
4.【.netcore Configuration】理解Configuration中Section弱方式读取和Binder模式的强类型读取代码
4.【.netcore Configuration】理解Configuration中Section弱方式读取和Binder模式的强类型读取代码
110 0