C# 中“is { }”语法是什么意思?

Ser*_*kiy 5 c#

在过去的几周里,我开始在 C# 中遇到这种新语法:

if (someObj is { })  
{    
    do some stuff 
}
Run Code Online (Sandbox Code Playgroud)

所以它返回布尔值。看起来有点像 JavaScript。但这项检查到底有什么作用呢?和这个一样吗?

if (someObj == null)
{
    do some stuff
}
Run Code Online (Sandbox Code Playgroud)

我知道新版本的 C# 包含很多语法糖。这是其中的一部分吗?它有名字或什么吗?例如,我知道这?:被称为三元运算符,并且?.被称为 Elvis 运算符。但什么是is { }?甚至是运营商吗?

is { }是的,我在提问之前尝试过在线搜索,但由于请求中的大括号,谷歌似乎拒绝找到任何有关语法的有用信息。

Mar*_*ell 4

从更一般的意义上来说,这是基于成员的模式匹配 - 例如:

if (foo is { Id: 42, Name: "abc"})
{

}
Run Code Online (Sandbox Code Playgroud)

测试是否fooId42 和Name“abc”。在这种情况下,您正在测试零个属性,因此它实际上is object变得与(即非测试或不可为空值类型的null无操作)相同。true

与问题 ( if (someObj == null)) 中的内容进行比较 -与此相反,请注意它也不会使用重载==运算符进行测试null(它将== null