C#7引入了一个名为“模式”的新特性,您可以将它与Is-表达式或切换情况一起使用,如下所示:
string str = null;
switch(str){
case string x:
Console.WriteLine("string " + x);
break;
default:
Console.WriteLine("default");
break;
}你会认为它会进入案例1,因为它是相同的类型,但它没有。
发布于 2017-03-22 11:53:12
不管你怎么想,string x = null实际上根本不是一个字符串。它是“nothing”,分配给string类型的变量。
您的交换机中的检查基本上与null is string相同,后者已经是很长一段时间以来的false。在使用泛型评估类型时,这是一个常见的问题,但它也有其优点。
在遮罩下,is使用as,并进行空检查。这就是为什么它不能返回true。您可以说is运算符的逻辑如下:
is = (null as string) != null发布于 2017-03-22 11:51:08
实际上,它们并不是因为空的字符串。
这样做的想法是,在c#7中使用模式的开关用例在计算用例时添加另一个Null检查用例,如果没有添加Null case检查,它将转到默认情况,所以最好在使用这个新功能时添加一个空大小写,或者如果您知道默认值会做什么,则将它保留为默认值。
希望能帮上忙!
https://stackoverflow.com/questions/42950833
复制相似问题