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

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.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的主要内容,如果未能解决你的问题,请参考以下文章

C# 9.0 新特性之模式匹配简化

.NET 6新特性试用 | 总结:我最喜欢的5个特性

.NET 6新特性试用 可写JSON DOM API

.NET 6新特性试用 | PeriodicTimer

.NET 6新特性试用 | 可空引用类型

.NET 6新特性试用 | TryGetNonEnumeratedCount