这个语法有什么作用? if(obj是SomeType obj2)

时间:2017-10-13 14:26:13

标签: c#

我开始看到这些陈述,我试图围绕这些陈述。

if (obj is SomeAuto car)
{
   //Do stuff
}

如果我理解正确的话,我们基本上将obj投射到变量汽车中,这将是一种类型" SomeAuto"?

1)本声明的官方术语是什么?

2)如果我想将if语句更改为因特定原因有条件执行会发生什么?

例如说SomeAuto是一个基类,我只想要某种类型的auto,或者说我想要所有的SomeAuto,除了可能是一种特殊类型。

1 个答案:

答案 0 :(得分:6)

此if语句使用C# 7.0 under pattern matching中添加的is表达式。文档指定:

  

is模式表达式扩展了熟悉的is运算符,以查询超出其类型的对象。

它使您能够检查obj是否属于特定类型,并将已转换的结果分配给变量。

在这些功能之前你可能会写:

var car = obj as SomeAuto;
if(car != null)
{
    //Do Stuff
}

正如@BurnBA所指出的,使用as而不是原始is的区别在于请注意,as运算符仅执行引用转换,可空转换和装箱转换因此不能用于检查不可为空的值类型。