前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET6新东西--模式匹配中的Extended Property Patterns

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

作者头像
喵叔
发布2021-12-24 14:14:34
3340
发布2021-12-24 14:14:34
举报
文章被收录于专栏:喵叔's 专栏

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

代码语言:javascript
复制
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实例变量实际类型并匹配属性,代码如下:

代码语言:javascript
复制
Employee obj = new Manager { Id=1, Name="zhangsan", Position="CEO" };
if(obj is Manager { Position: "CEO" } ceo)
{
    Console.WriteLine(ceo.Name);
};

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

代码语言:javascript
复制
if(obj is Employee { Manager: { Name:"张三", Manager:{ Position: "程序员" } } } employee)

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

代码语言:javascript
复制
if(obj is Employee { Manager.Name:"张三", Manager.Manager.Position: "程序" } employee)

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

代码语言:javascript
复制
if(obj is Employee { Manager.Name.Length:10 } employee)

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档