这是什么 C# 功能?

What C# feature is this?

在我的 C# 应用程序(使用 C# 9)中,我有一行代码如下:

var filterCallback = new HitTestFilterCallback(
    el => el is Path s && s.DataContext is IShape shp ?
        HitTestFilterBehavior.Continue : HitTestFilterBehavior.ContinueSkipSelf);

Resharper 建议我“合并顺序检查”。它将代码重写为

        var filterCallback = new HitTestFilterCallback(
            el => el is Path {DataContext: IShape shp}
                ?
                HitTestFilterBehavior.Continue : HitTestFilterBehavior.ContinueSkipSelf);

我对让我写的位感兴趣

{DataContext: IShape shp} 

代替

s.DataContext is IShape shp

此功能是否有特定的技术语言名称?我想阅读它以更好地理解它,但我什至不知道该怎么称呼它。我尝试查看“模式匹配”并阅读有关“is”关键字的内容,但没有看到任何类似的内容?

该功能称为“递归模式”。特别是它使用“属性 模式”作为“递归模式”的一部分。

您可以在此处找到提案文件:https://github.com/dotnet/csharplang/blob/master/proposals/csharp-8.0/patterns.md

您可以在此处找到更非正式的博客 post:https://devblogs.microsoft.com/dotnet/do-more-with-patterns-in-c-8-0/