8

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,因为它是相同的类型,但事实并非如此。

4

2 回答 2

16

不管你怎么想,string x = null实际上根本就不是一个字符串。它是“无”,分配给字符串类型的变量。

null is string您的开关中的检查与false长期以来的检查基本相同。在使用泛型评估类型时,这是一个常见问题,但它也有其优点。

在引擎盖下,is使用as, 进行空检查。所以这就是为什么它不能返回真。您可以说运算符的逻辑is如下:

is = (null as string) != null
于 2017-03-22T11:53:12.067 回答
0

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

这个想法是,在 c#7 中具有模式的switch案例在评估案例时添加了另一个用于 Null 检查的案例,如果您没有添加 Null 案例检查,它将转到默认案例,所以最好添加一个 null使用此新功能时的情况,或者如果您知道默认值会做什么,请将其保留为默认值。

希望能帮助到你!

于 2017-03-22T11:51:08.840 回答