问题
I found in some C# source code the following line:
if(!(context.Compilation.GetTypeByMetadataName("Xunit.FactAttribute") is { } factAttribute))
and here is another one:
if(!(diagnostic.Location.SourceTree is { } tree))
What is the meaning of the curly braces ({ }
) after the is
operator?
回答1:
This is a new pattern matching feature which was introduced in C# 8.0 and is called property pattern. In this particular case it is used to check that object is not null, example from linked article:
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"
};
来源:https://stackoverflow.com/questions/62139886/c-sharp-meaning-of-curly-braces-after-the-is-operator