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

C#7引入了一个名为patterns的新function,您可以将其与Is-Expression或Switch案例一起使用,如下所示:

string str = null; switch(str){ case string x: Console.WriteLine("string " + x); break; default: Console.WriteLine("default"); break; } 

并且你会期望它会进入#1的情况,因为它是相同的类型,但它没有。

尽管您可能会想到,但string x = null实际上根本不是字符串。 它是“无”,分配给string类型的变量。

检查你的交换机基本上是相同的null is string ,已经很长时间是false的。 在使用generics评估类型时,这是一个常见问题,但它也有优势。

在引擎盖下,使用as ,使用null检查。 所以这就是它无法返回真实的原因。 你可以说is运算符的逻辑如下:

 is = (null as string) != null 

实际上它们不是因为字符串上的null。

我的想法是在c#7中使用模式切换案例会在评估案例时为Null检查添加另一种情况,如果你没有添加你的Null案例检查,它将转到默认情况,所以最好添加一个null使用此新function时的情况,或者如果您知道默认情况会将其保留为默认值。

希望能帮助到你!