MAb*_*lim 7 c# pattern-matching switch-statement null-string c#-7.0
C#7引入了一个名为patterns的新功能,您可以将其与Is-Expression或Switch案例一起使用,如下所示:
string str = null;
switch(str){
case string x:
Console.WriteLine("string " + x);
break;
default:
Console.WriteLine("default");
break;
}
Run Code Online (Sandbox Code Playgroud)
并且你会期望它会进入#1的情况,因为它是相同的类型,但它没有.
Pat*_*man 14
尽管你可能会想到,string x = null
实际上根本不是一个字符串.它是'无',分配给string类型的变量.
在开关的检查是基本相同,null is string
这是false
很长一段时间了.在使用泛型评估类型时,这是一个常见问题,但它也有优势.
在引擎盖下,is
使用as
,使用空检查.所以这就是它无法返回真实的原因.你可以说is
运算符的逻辑如下:
is = (null as string) != null
Run Code Online (Sandbox Code Playgroud)
实际上它们不是因为字符串上的空值。
这个想法是, c#7 中带有模式的switch case 在评估案例时添加了另一个用于 Null 检查的案例,如果您没有添加 Null 案例检查,它将转到默认情况,因此最好添加一个 null使用此新功能时的情况,或者如果您知道默认值会做什么,请将其保留为默认值。
希望能帮助到你!