【C# 教程系列第 2 篇】c# 中 if...else 语句与 switch...case 语句的区别

这是【C# 教程系列第 2 篇】,如果觉得有用的话,欢迎关注专栏。


项目代码中,自己用到了很多的 if…else 语句和 switch…case 语句的判断,平常也只是知道它们的用法,没去想什么时候用 if…else 语句合适,什么时候用 switch…case 语句合适。

今天周末,白天出去潇洒了,晚上有时间了(说了一句废话),整理了两者的区别,和我一样有过类似疑问的朋友可以参考下,哪里有总结的不对的地方,望不吝赐教。

一:从“优缺点”分析

if…else
优点:使用灵活,代码空间小 ;

缺点:效率低,因为 if else 必须遍历所有的可能值;

switch…case
优点:代码结构清晰,效率高;

缺点:
1、不够灵活,switch 仅支持 int, char, unsigned char 等基本类型。
2、代码空间大,因为它要生成跳表,特别是当 case 常量分布范围很大但实际有效值又比较少的情况,switch…case 的空间利用率将变得很低。对于 switch,实际上是根据 case 最小值与最大值,维系了一段连续的内存空间,以空间换取时间;

二:从“底层原理”分析

if…else
系统是自上而下逐个条件去判断,直到符合条件,所以应将机率大的条件置于最前面。

switch…case
switch 语句根据一个整数索引值进行多重分支,底层采用跳转表这种数据结构。跳转表是一个数组,表项 i 对应代码段的地址。当 switch 索引值等于表项 i 时采取对应的程序操作。

可简单理解为:
执行 switch 时生成一个长度为最大 case+1 的数组,程序首先判断 switch 变量是否大于最大 case 常量,若大于,则跳到 default 分支处理。否则取得数组索引号为 switch 变量值大小,取得数组对应值即为相应 case 代码块地址,程序接着跳到此地址执行,完成分支的跳转。

三:从“选择性”分析

  • 当选择分支较少时,选用 if else 比 switch…case 的效率要高。一般 3个 以内的分支我会用 if…else 结构,大于3个的分支我都会用 switch…case,个人习惯,这样结构看着舒服。
  • 当选择分支较多时,选用switch…case结构会提高程序的效率。

四:总结

switch…case 只能处理 case 为常量的情况,对非常量的情况是无能为力的。
例如 if (x > 1 && x < 100),是无法使用 switch…case 来处理的。

所以,switch 只能是在常量选择分支时比 if…else 效率高,但是 if…else 能应用于更多的场合,它比较灵活。

结束语:

在一个 unity 群里,一位大神说了这样一句话,值得深思。作为程序员,不能知其然,而应该要知其所以然才行

前几天在群里,我说我准备写关于 if…else 语句与 switch…case 语句区别的博客,群里一部分人感觉有点可笑,觉得这么简单的流程语句还用写博客?不过也有支持我的,因为他们曾经也有过这样的疑问。

既然我遇到了疑问,那我就去总结,知其所以然,我才能进步的更快。再接再厉,向大神的部队前进…

Over……

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen Su

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值