C#-“ is”运算符后花括号的含义

问题描述 投票:4回答:1

我在某些C#源代码中找到以下行:

if(!(context.Compilation.GetTypeByMetadataName("Xunit.FactAttribute") is { } factAttribute))

这是另一个:

if(!(diagnostic.Location.SourceTree is { } tree))

{ }运算符后花括号(is)的含义是什么?

c# operator-keyword curly-braces
1个回答
7
投票

这是C#8.0中引入的新模式匹配功能,称为property pattern。在这种特殊情况下,它用于检查对象是否不为null,例如来自链接文章的示例:

static string Display(object o) => o switch
{
    Point { X: 0, Y: 0 }         p => "origin",
    Point { X: var x, Y: var y } p => $"({x}, {y})",
    {}                           => o.ToString(),
    null                         => "null"
};
© www.soinside.com 2019 - 2024. All rights reserved.