C#7使用空检查切换案例

时间:2017-03-22 11:51:09

标签: c# switch-statement pattern-matching c#-7.0 null-string

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案例,因为它是相同的类型,但它没有。

2 个答案:

答案 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>默认大小写,因此最好在使用此新功能时添加空案例,或者如果您知道默认值将保留默认值,则将其保留为默认值。

希望它有所帮助!