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时的情况,或者如果您知道默认情况会将其保留为默认值。
希望能帮助到你!