C#中switch语句为什么必须添加default? 5C

C#中switch语句为什么必须添加default?是因为安全性吗,求大神指教

c#

27个回答

就像if else if ,后面要有else一样

确实可以理解为一种安全的编程方式
我个人理解,其作用为:防止不进入分支的错误。因为有的时候,我们在写程序的时候,可能会有考虑不到的情况。
而default一方面可以帮助我们避免不进入分支的错误,另一方面可以帮助我们发现我们未考虑到的情况(可以在default中抛出异常信息)

ElegyWine
ElegyWine 也算是一种固有的编码格式吧,
接近 2 年之前 回复
weixin_39985106
weixin_39985106 有点类似if else吧
接近 2 年之前 回复
nbzdds08
nbzdds08 另外,补充一点,default不是必须要有的。但强烈建议保留default
接近 2 年之前 回复

我觉得有两个方面的原因:
1、代码的可读性
即使考虑了所有的case,添加了default分支也可以提高代码的可读性。
2、可以避免不必要的错误
default分支中添加一些打印语句,当正常的分支无法处理时,进入default分支,可以让开发者看到当前代码的走向。
可以在default分支中加入适当的打印信息,方便代码调试。

default语句是为了防止出现case判断全部不匹配时程序出错的状况

严谨,易读,写上不会有错,不写可能会出错。

加上default可增加代码可读性

不是必须的,在case都不满足的时候,程序会去找default,找不到了,就退出整个switch了,还是带上比较好

不是必须的。 switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序;若所有的case都不满足,则找default入口;若未找到则退出整个switch语句。 所以default只是一个备用的入口,有没有都无所谓

提供一种写法 这样如果都没有的情况你可以额外提供一种出口

可以作为检查条件的一种手段:用来调试程序
case default:
assert(true);
break;

还可以打印一些log出来

共27条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#数组switch中的goto问题

在键盘上接收用户输入的15个整数数值,输入完成后,接收用户输入的指令, 如果用户输入a(大小写不区分)升序排列,如果输入d(大小写不区分)降序排列,否则提示 用户重新输入指令,输出排序前与排序后的数列内容。 下面是我的代码 namespace ConsoleApplication16 { class Program { static void Main(string[] args) { int[] arr = new int[15]; Console.WriteLine("请输入15个整数"); //初始化 for (int i = 0; i < 15; ++i) { if (!int.TryParse(Console.ReadLine(), out arr[i])) Console.WriteLine("输入有误"); } //复制原数组 int[] arr1 = (int[])arr.Clone(); //获取指令,根据指令调用函数 Order: Console.WriteLine("请输入指令"); char order; order = (char)Console.Read(); switch (order) { case 'a': fun1(arr); break; case 'A': fun1(arr); break; case 'd': fun2(arr); break; case 'D': fun2(arr); break; default: Console.WriteLine("请重新输入指令"); goto Order; } //打印原数组 Console.Write("原序列为:"); for (int i = 0; i < 15; ++i) Console.Write(arr1[i] + ","); Console.WriteLine(); //打印新数组 Console.Write("新序列为:"); for (int i = 0; i < 15; ++i) Console.Write(arr[i] + ","); Console.WriteLine(); } //a或者A指令 public static void fun1(int[] arr) { for(int i = 0; i < 14; ++i) for(int j = 0; j < 14 - i; ++j) { int temp; if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } //d或者D指令 public static void fun2(int[] arr) { for(int i = 0; i < 14; ++i) for(int j = 0; j < 14 - i; ++j) { int temp; if(arr[j] < arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } } 下面是测试,请教指令输入那里为什么自动循环3次? ![CSDN移动问答][1] [1]: http://share.weiyun.com/7f2d8de3f925ff996ad2aab9e648bded

关于Switch语句,求大神解答!感谢!

public class HelloWorld { public static void main(String[] args) { int num=1; switch(num){ case 1: System.out.println("1"); case 2: System.out.println("2"); break; case 3: System.out.println("3"); break; default: System.out.println("4"); } } 小弟学习Java时遇到的问题,:关于上述代码,如果把case1后面的break去掉,我能理解case1的语句能执行,到case2后面的break终止,但是switch中num的值和case2后面的值不匹配,为什么会执行case2后面的语句呢? 十分感谢帮忙的大神!

如何用c#调用sql语句?

如何用c#调用sql语句,实现对绑定的excel数据库进行保存、修改等操作?

在c#中update语句怎么写

string str = string.Format("update " + ming + " set " + lieming[j, 0] + " = " + jilushuzhi_left[j, i] + " where 点数 = " + i); ming 是上面定义的一个string变量, lieming[j, 0]是上面定义的一个string变量数组 jilushuzhi_left[j, i]是上面定义的一个double变量数组 提示错误,应该怎么写

Sql语句中in在C#的linq语句中如何使用

Sql语句中的in在C#中如何使用,我要根据ID批量修改一个字段的内容,在linq中如何使用in来修改???? 比如说根据ID统一修改人员表中的年龄为22岁,表名User Sql语句:update User set Age=22 where ID in(1,2,3,4,5,6) 这句Sql语句如何用linq写出来??????

C#中sql语句不能正常执行,各位大牛帮忙看一下

private void Form3_Load(object sender, EventArgs e) { string sql = "insert into Phone3 (select * from Phone1 union select * from Phone2)"; SqlConnection con = new SqlConnection(strConn); SqlCommand cmd = new SqlCommand(sql,con); con.Open(); if( cmd.ExecuteNonQuery()==0) MessageBox.Show(@"成功!"); con.Close(); 没有插入成功,也没有弹出MessageBox。 断点调试是出现了: 线程 0x163c 已退出,返回值为 259 (0x103)。 “System.Data.SqlClient.SqlException”类型的第一次机会异常在 System.Data.dll 中发生 各位帮小弟一把,刚学C#,好多不懂的。

C# 执行插入语句出错,请各位大神帮忙看看怎么修改

string sql = "inesrt into UserSInfo (UserNum,UserName,UserSex,UserAge,College,Class,Gra,Tel,Remark) values ('" + textBox1.Text.Trim() + "','" + textBox2.Text.Trim() + "','男','" + textBox2.Text.Trim() + "','" + textBox3.Text.Trim() + "','" + textBox4.Text.Trim() + "','" + comboBox1.Text+ "','" + textBox5.Text.Trim() + "','" + textBox6.Text.Trim() + "')";

C#中for语句中的表达式,怎么用快捷键打出快来

for(int i=0;i<100;i++) 我看别人在写for语句的时候,括号里面的老是用快捷键打出来的

C#中SQLserver语句insert语句无法更新数据

string sqlUpdataString = "insert into RelationTab(RelationId,FoodId,OrderId,FoodName,FoodPrice) values(" + RelationIdMax + "," + FoodId + "," + OrderId + ",'" + FoodName + "'," + FoodPrice + ")"; 如上,这行代码并没有把数据插入到相应的表中,RelationTab是表名,相应列名也都核对过,传入数据也都进行的数据类型的转换。 在上述代码之后重新声明了新的SqlCommand对象: SqlCommand cmd3 = new SqlCommand(sqlUpdataString, conn); cmd3.CommandText = sqlUpdataString; 找了很久也没发现什么问题,是不是我sql语句的语法出现了错误?因为我随便删了里面几个字母,都没什么反应和区别。C#连数据库操作真的很不好用,数据库语句出了什么问题也没法比较直观的反应出来。

C#for语句和if语句结合使用

根据数据库查询的结果条数,动态显示表格 一共有5列,行数根据条数而变化。 1-5条 一行 6-10条 两行 11-15条 三行 依次类推,如何写代码

C#中sql语句关于datetime类型数据的选择

在数据库中,每天的每一个小时会有一条数据插入,怎样获取最近七天或者一个月的数据,每天只需要一个,以每天24个数值的平均值作为一天的代表数据???????求代码

C# 数据库修改语句速度 (问?)

我现在有很多条的sql 修改语句 update 表A set 字段1='', 字段2 = '' where 字段3='' 基本上没分钟有几百条吧,有什么方法提高效率

c#多条件查询,怎么写语句请教各位c#多条件查询请教各位c#多条件查询

请教各位c#多条件查询,请教各位c#多条件查询请教各位c#多条件查询

c# 执行sql语句的时候 返回的是DataTable

c# 执行sql语句的时候 返回的是DataTable 如果DataTable没有值的话 是==null 还是==0

c# access update语句出错

初学,UPDATE tb_BookOnSell SET [图书名称] = '" + textBox1.Text + "',[出版社] = '" + textBox2.Text + "',[图书作者] = '" + textBox3.Text + "',[图书成色] = '" + textBox4.Text + "',[出售者] = '" + textBox5.Text + "',[图书简介] = '" + textBox6.Text + "',[图书价格] = '" + textBox7.Text + "',[图书类别]='" + textBox8.Text + "'WHERE [图书编号] ='" + bianhao+"'";问题在哪呢,关键字也没有冲突,总是提示update语句的语法错误。

C# 与 oracle 的SQL语句问题

![图片说明](https://img-ask.csdn.net/upload/201507/29/1438130663_230324.png) private void button2_Click(object sender, EventArgs e) { OpenFileDialog fileName = new OpenFileDialog(); fileName.InitialDirectory = "D:\\Users\\zwj\\Desktop\\调试工具"; fileName.Filter = "All files (*.*)|*.*|* files (*.*)|*.*"; fileName.FilterIndex = 2; if (openFileDialog1.ShowDialog() == DialogResult.OK) { richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText); } } private void button1_Click(object sender, EventArgs e) { string str = richTextBox1.Text; string[] lines = str.Split(Environment.NewLine.ToCharArray()); for (int i = 1; i < lines.Length; i++) { Console.WriteLine(lines[i]); string[] linecell = lines[i].Split(new char[] { ',' }); if (linecell.Length > 2) { string richTextBo = richTextBox2.Text+ linecell[2] + "\r\n";//读取出身份证号码 string aaa = AES.AESEncrypt(linecell[2]); richTextBox2.Text += aaa + "\r\n"; //对身份证号码进行加密 string connString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.6.161) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User Id=zhianguankong2; Password=zhianguankong2123"; OracleConnection conn = new OracleConnection(connString); try { conn.Open(); ** string sql = "insert into TB_BLACKLIST(VEHID,CARDID,MANTYPE,TIME,UNITID,ALARMPERSON,ALARMPHONE,ISCANCEL)values(sys_guid(),:s1, null , null , null ,null ,null , 0)";****** OracleCommand cmd = new OracleCommand(sql, conn); OracleParameter[] para = { new OracleParameter (":s1", OracleType.NVarChar),}; para[0].Value = richTextBox2.Lines; if (aaa == null) { string qqq = " Update TB_BLACKLIST set VEHID =1"; OracleCommand qq = new OracleCommand(qqq, conn); } OracleDataReader odr = cmd.ExecuteReader(); } catch (Exception ee) { richTextBox3.Text = (ee.Message); //如果有错误,输出错误信息 } finally { conn.Close(); //关闭连接 } } } ![图片说明](https://img-ask.csdn.net/upload/201507/29/1438130677_239850.png) 上面的是我的任务要求,但是我的SQL语句写错了,报错ORA-01008: 并非所有变量都已绑定,而且我还不知道C#中的richTextBox2.Text每行的数据插入到ORACLE中应该用什么参数,求大家帮忙

C#中写SQL语句,单双引号的区别,为什么会报标准表达式中数据类型不匹配。

OleDbDataAdapter WorkPieceDataDA = new OleDbDataAdapter("update" + "[" + ming + "]" + "set " + lieming[j, 0] + " = '" + jilushuzhi_left[j, i] + "' where 点数 ='" + dianshu[0, i] + "'", tempconn);//充当 DataSet 和数据源之间的桥梁,用于检索和保存数据 这里的点数为列名,在上面设置的类型为int,请问为什么会报 标准表达式中数据类型不匹配。

C#中数据库连接语句的区别

string connstr = "Provider=Microsoft.Jet.OleDb.4.0;"; connstr += @"Data Source=D:\Merger20150615\GEARCNC.mdb";//当用上面的语句创立连接时,ACCESS数据库中的内容是被删掉的,但是当用下面的语句时数据库中的数据怎么改变不了呢? string connstr = "Provider=Microsoft.Jet.OleDb.4.0;"; connstr += @"Data Source=GEARCNC.mdb";

C#中update 更新语句中遇到的问题

string sql = string.Format("update tb_Addressbook set Name = '" + Address_1.Text + "',Sex='" + Address_2.Text + "',Phone = '" + Address_3.Text + "',QQ='" + Address_4.Text + "',WordPhoe ='" + Address_5.Text + "',E_Mail='" + Address_6.Text + "',Handset='" + Address_7.Text + "' where ID =" + Store.Address_ID); 其中 Store.Address_ID静态字段,存放的是查询表中的ID所获得的值 SqlHelper.SqlExecuteNonQuery(sql, CommandType.Text); 其他信息: 违反了 PRIMARY KEY 约束“PK__tb_Addre__3214EC27A6EE7F9C”。不能在对象“dbo.tb_AddressBook”中插入重复键。重复键值为 (1)。

程序员的兼职技能课

程序员的兼职技能课

为linux系统设计一个简单的二级文件系统

实验目的: 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 实验要求: 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条)

CCNA+HCNA+wireshark抓包综合网工技能提升套餐

本套餐包含思科路由交换CCNA,部分CCNP核心,华为HCNA以及wireshark抓包等类容,旨在培养具有综合能力的网络工程师。

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

成年人用得到的6款资源网站!各个都是宝藏,绝对让你大饱眼福!

不管是学习还是工作,我们都需要一些资源帮助我们有效地解决实际问题。 很多人找资源只知道上百度,但是你们知道吗,有的资源是百度也搜索不出来的,那么今天小编就给大家介绍几款好用的资源网站,大家赶紧收入囊中吧! 1.网盘007 https://wangpan007.com/ 一款全能的资源搜索网站!只需要输入关键字,就能获得你想要的视频、音乐、压缩包等各种资源,网上...

矿车轴载荷计算方法的比较及选用

针对矿车轴的弯曲损坏,分析了固定式矿车车轴的受力,并对力叠加法以及当量负荷法2种计算方法进行了分析和比较,认为应采用当量负荷法进行车轴的设计计算。

Python数据清洗实战入门

Python数据清洗实战入门

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Polar编码matlab程序

matlab实现的Polar codes源程序

2019全国大学生数学建模竞赛C题原版优秀论文

2019全国大学生数学建模竞赛C题原版优秀论文,PDF原版论文,不是图片合成的,是可编辑的文字版。共三篇。 C044.pdf C137.pdf C308.pdf

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

Linux下聊天室实现(基于C)

在linux下的基于TCP/IP,采用socket通信的聊天室,实现进入聊天室,进行多人群聊,指定人进行私聊,群主管理员功能,颗进行禁言,提出群聊等操作。个人账号可修改昵称或者修改密码,还可进行找回密

一个较完整的Qt用户登录界面设计

一个较完整的Qt用户登录界面,稍微移植可用,用sqlite数据库存储用户名和密码,具有增加和删除用户的功能,开发环境为ubuntu16.04+Qt5.6.1,win7下程序也编译可用。贡献出来,共同学

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

【C语言】贪吃蛇游戏代码(Visual C++6.0实现)

本游戏代码参考《C语言项目开发全程实录(第二版)》第六章。代码已在Visual C++6.0环境下编译测试通过,可在VC++6.0编译器中导入工程编译运行查看效果,或者也可以直接运行Release或D

Android小项目——新闻APP(源码)

Android小项目——新闻APP(源码),一个很简单的可以练手的Android Demo Ps:下载之前可以先看一下这篇文章——https://blog.csdn.net/qq_34149526/a

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

Android音视频开发全套

Android平台音视频开发全套,涉及:FFmpeg软解码解码、Mediacodec硬解码编码、Openssl音频播放、OpenGL ES视频渲染、RTMP推流等核心重要知识点。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

2019 Python开发者日-培训

2019 Python开发者日-培训

2019 AI开发者大会

2019 AI开发者大会

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

C++语言基础视频教程

C++语言基础视频教程

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐