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

Joh*_*Doe 5 c#

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

if (obj is SomeAuto car)
{
   //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,我们基本上将obj转换为变量汽车,这将是一个类型"SomeAuto"?

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

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

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

Gil*_*een 6

此if语句使用模式匹配下isC#7.0中添加的表达式.文档指定:

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

它使您能够检查是否obj具有特定类型,并将转换结果分配给变量.


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

var car = obj as SomeAuto;
if(car != null)
{
    //Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

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

  • "请注意,as运算符仅执行引用转换,可空转换和装箱转换.as运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行转换." https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as (2认同)