有BUG!!!慎用default文本

前言

下面这段代码,你能发现什么问题吗?

public static int? Test1(string str)
{return str switch{"A" => 1,"B" => 2,"C" => 3,_ => default,};
}
public static int? Test2(string str)
{switch (str){case "A":return 1;case "B":return 2;case "C":return 3;default:return default;}
}

好像没什么问题,执行下列代码:

Console.WriteLine("Test1:" + Test1("My IO"));
Console.WriteLine("Test2:" + Test2("My IO"));

现在你看到问题了吧!Test1返回了int而不是int?的默认值!

什么是default文本

从 C# 7.1 开始,当编译器可以推断表达式类型时,可以使用 default 文本生成类型的默认值。default 文本表达式生成与 default(T) 表达式(其中,T 是推断的类型)相同的值。可以在以下任一情况下使用 default 文本:

  • 对变量进行赋值或初始化时。

  • 在声明可选方法参数的默认值时。

  • 在方法调用中提供参数值时。

  • 在 return 语句中或作为表达式主体成员中的表达式时。

bug

问题就在于,编译器推断错了类型。

反编译生成的代码:

可以看到,编译器把switch表达式中的default转换成0,而把switch语句中的default转换成null。

结论

解决方法也简单,换成default(int?)或者直接用null

总之,慎用default,你不知道编译器都做了啥!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老师看完都吐血的五道题

全世界只有3.14 % 的人关注了 爆炸吧知识 老师看完都要吐血的五道题哈哈哈哈哈虽然小编觉得最后一答完全没问题哈哈哈图片来源于网络,如有侵权请联系删除。你点的每个在看,我都认真当成了喜欢

JDK5.0新特性--可变参数

2019独角兽企业重金招聘Python工程师标准>>> /*** 可变参数*/ public class VariableParamater {/*** 统计2个或多个数的和*/public static void main(String[] args) {//计算2个数的和sum(10,15);/** 问题:如果要计算3个数、4个数、5个数或n个数的和&am…

欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...

将深度学习和计算机视觉相结合的隔离项目社会距离化这个术语已席卷全球,正在改变着我们的生活方式。社交距离也称为“物理距离”,是指在您自己与其他并非来自家庭的人之间保持安全的空间。随着该国开始在激增的COVID-19案件中发挥作用,保持社…

python 实现点击右键用某个程序打开功能_工欲善其事,必先利其器(1)——Python开发环境安装与配置...

Life Is Short, You Need Python.近年来随着Python的火爆,很多人想要学习并使用Python,本文将详细介绍一套Python开发环境的安装与配置,相比Python自带的IDEL,在此环境下将极大的提高开发效率。下面就让我们一步步的开始安装&…

5分钟盗走你的隐私照片,这个全球性漏洞到底有多可怕

全世界只有3.14 % 的人关注了爆炸吧知识转自:好机友ID:goodjiyou这个时代,大家对电脑出现漏洞,可能已经习以为常。但如果机哥告诉大家,这个漏洞能够在 5 分钟内,破解并盗取你所有加密文件,而且还…

我的世界命令计算机,我的世界有哪些指令?电脑版指令大全

在我的世界游戏中玩家可以依靠指令做很多现实生活中都可以做的事情,甚至有些现实中做不到的事情,比如上天堂,所以指令对于每个我的世界的玩家来说都非常重要,今天小编给大家介绍我的世界指令大全:我的世界指令大全&…

道德经和译文_老子《道德经》第九章原文、注释、译文、导读及解析(收藏版)...

《道德经》被誉为“万经之王”,内容涵盖哲学、伦理学、政治学、军事学等诸多学科,曾被后人尊奉为治国、齐家、修身、为学的宝典。它对我国的哲学、科学、政治、宗教等都产生了深远的影响,体现了古人的一种世界观和人生观。《道德经》作为道教…

StackOverflow程序员推荐:每个程序员都应读的30本书

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。” 很多程序员响应,他们在推荐时也写下…

超震撼!你没见过的24张震撼照片

全世界只有3.14 % 的人关注了爆炸吧知识话不多说,这些照片,每张都很有价值:艾菲尔铁塔,从底部往上看360度的彩虹高科技停车(大众沃尔夫斯堡汽车厂)被整理过的蜂窝沙特阿拉伯的农田两棵树共享一个枝干两位接…

使用 baget 搭建 nuget 私有服务

现在几乎所有语言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub 。.Net 程序当然是 NuGet 。NuGet 也出现很多年了,奇怪的是居然还有很多人不知道。现在软件结构越来越复杂,在多个项目中往往需…

xp计算机dns怎么设置,XP系统dns怎么设置?XP系统dns的设置方法

在使用XP系统浏览网页时,大家有没碰到网页打开很慢,而网速检测又显示正常的情况。为什么会出现这样的情况呢?一方面可能是你的电脑中毒了,另一方面可能是你的dns选择的不够好。那么dns要怎么设置才最好呢?下面小编以XP…

线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数

作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124面试场景面试官:Java多线程了解吗?你给我写一下,起两个线程交替打印0~100的奇偶数。小黄:啊?面试官:就…

asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格

有很多不同的东西你可以写到电子表格,从简单的文本或数字值到复杂的公式,图表,甚至图像。创建一个简单的电子表格之前,大家看到了一个非常快速的例子,就是如何将 "Hello world!"写进电子表格中,所…

纯css3实现的鼠标悬停动画按钮

今天给大家带来一款纯css3实现的鼠标悬停动画按钮。这款按钮鼠标经过前以正方形的形式&#xff0c;当鼠标经过的时候以动画的形式变成圆形。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div><span></span></div> …

如何交到一个女朋友?

1 北京的路&#xff0c;上海的路和重庆的路2 这兔子是吃弹簧长大的吧&#xff01;3 猫和老鼠原来是真的4 把水凝胶珠投入有颜色的水&#xff0c;过一会儿之后...5 为了同学得分&#xff0c;老师有多努力你知道吗&#xff1f;6 不同年龄段爱用的表情7 来自一个幼儿园小男生的教学…

浅析 Dapr 里的云计算设计模式

Dapr 实际上是把分布式系统 与微服务架构实践的挑战以及k8s 这三个主题的全方位的设计组合&#xff0c;特别是Kubernetes设计模式 一书作者Bilgin Ibryam 提出的Multi-Runtime Microservices Architecture&#xff0c;中译参见敖小剑的博客: [译] 多运行时微服务架构。分布式系…

Linux Kickstart无人值守安装(上)

Linux Kickstart无人值守安装 在我们的网络维护生涯中&#xff0c;有不少朋友&#xff0c;感觉到自己在机械的做一件事情&#xff0c;在无聊、无趣和无奈中工作。尤其一些简单重复的操作更容易让大家感到工作的无趣。今天将给大家介绍如何大规模的部署RedHat Linux操作系统&…

path manipulation怎么解决_干货!终于!解决macOS下pyenv安装python3.8.2缺少tkinter模块的问题!...

前言&#xff1a;笔者不过是一个刚立下flag要学习Python的小白&#xff0c;&#xff08;这也是笔者的第一篇网文、知乎文&#xff0c;如果没用&#xff0c;求轻虐&#xff09;&#xff0c;为此还冲动傻傻地配了一台2019款13寸的MacBook Pro。电脑配置&#xff08;作为参考&…

如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形

题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。以上是柱状图的示例&#xff0c;其中每个柱子的宽度为 1&#xff0c;给定的高度为 [2,1,5,6,2…

VMWare虚拟机NAT上网方法 亲测可用

首先虚拟机的网卡要选择NAT 然后 在Virtual Network Editor中一定选上DHCP功能。 还要主机的服务必须开启。主机的VMnet8对应NAT模式&#xff0c;这个VMnet8的配置保持默认不要改&#xff0c;默认会有IP&#xff0c;不要设置成自动获取。 在虚拟机Windows系统的网卡设置必须自动…