首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有空检查的C# 7交换机用例

带有空检查的C# 7交换机用例
EN

Stack Overflow用户
提问于 2017-03-22 11:51:08
回答 2查看 4.4K关注 0票数 8

C#7引入了一个名为“模式”的新特性,您可以将它与Is-表达式或切换情况一起使用,如下所示:

代码语言:javascript
复制
string str = null; 
switch(str){
    case string x:
        Console.WriteLine("string " + x);
        break;
    default:
        Console.WriteLine("default");
        break;
}

你会认为它会进入案例1,因为它是相同的类型,但它没有。

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 11:53:12

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

您的交换机中的检查基本上与null is string相同,后者已经是很长一段时间以来的false。在使用泛型评估类型时,这是一个常见的问题,但它也有其优点。

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

代码语言:javascript
复制
is = (null as string) != null
票数 16
EN

Stack Overflow用户

发布于 2017-03-22 11:51:08

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

这样做的想法是,在c#7中使用模式的开关用例在计算用例时添加另一个Null检查用例,如果没有添加Null case检查,它将转到默认情况,所以最好在使用这个新功能时添加一个空大小写,或者如果您知道默认值会做什么,则将它保留为默认值。

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42950833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档