C#7引入了一项名为 patterns 的新功能,您可以将其与Is-Expression或Switch案例一起使用,如下所示:
string str = null;
switch(str){
case string x:
Console.WriteLine("string " + x);
break;
default:
Console.WriteLine("default");
break;
}
并且你会期望它会进入#1案例,因为它是相同的类型,但它没有。
答案 0 :(得分:14)
尽管你可能会想到,string x = null
实际上根本不是一个字符串。它是'无',分配给string类型的变量。
您的切换检查基本上与null is string
基本相同,false
已经很长时间了。在评估具有泛型的类型时,这是一个常见问题,但它也有优势。
在幕后,is
使用as
进行空检查。所以这就是它无法返回真实的原因。您可以说is
运算符的逻辑如下:
is = (null as string) != null
答案 1 :(得分:0)
这个想法是在c#7中使用模式的 switch 案例在评估案例时为Null检查添加了另一个案例,如果你没有添加你的Null案例检查,它将转到< em>默认大小写,因此最好在使用此新功能时添加空案例,或者如果您知道默认值将保留默认值,则将其保留为默认值。
希望它有所帮助!