当前位置:   article > 正文

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

c# switch...case 与 if else

这是【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……

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

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


结束语

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

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/142155
推荐阅读
相关标签
  

闽ICP备14008679号