关于c#:这个语法有什么作用?


What does this syntax do? if(obj is SomeType obj2)

我开始看到这些陈述,我试图用我的头脑来理解这些陈述。

1
2
3
4
if (obj is SomeAuto car)
{
   //Do stuff
}

如果我理解正确的话,我们基本上是把obj转换成一辆"someauto"型的可变车。

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

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

例如,假设someauto是一个基类,而我只需要某种类型的auto,或者说我需要所有someauto,除了一种特定的类型。


此if语句正在模式匹配下使用c_7.0中添加的is表达式。文件规定:

The is pattern expression extends the familiar is operator to query an object beyond its type.

它使您能够检查obj是否属于特定类型,并将强制转换结果赋给变量。

在这些功能之前,您可能会写:

1
2
3
4
5
var car = obj as SomeAuto;
if(car != null)
{
    //Do Stuff
}

正如@burnba所指出的,使用as与原始is的区别在于,as运算符只执行引用转换、可空转换和装箱转换,因此不能用于检查不可空值类型。