C# 条件语句全面演练第 2 部分 - switch
介绍
这是C# 条件语句系列文章的第二部分。在第一部分中,我们深入研究了if-else语句及其组合。如果您错过了,请查看。
在本指南中,我们将重点介绍另一个重要的条件语句:switch语句。然后我们将比较它们并总结条件选择的最佳实践。此外,我们将学习高级用法。
由于这是针对初学者的指南,我会尽力使用生动的视觉效果和示例来帮助您理解。
- 首先,我将从一个有趣的场景开始。
- 接下来我会把各种条件语句的代码模板和流程图展示给大家。
- 此外,我们还将对它们进行比较并总结最佳实践。
- 最后我们来说一下高级用法。
switch 语句
设想
想象一下这样的场景:
实现自动驾驶系统的功能。处理汽车遇到红绿灯时的反应。
绿灯亮时,顺利通过。红灯亮时,减速停车。
如果是黄灯,请参考红灯,以养成良好的驾驶习惯。(路线无数。安全第一。)
switch语句是解决这个问题的最佳方法。
句法
如果针对三个或更多条件测试单个表达式,则通常使用 switch语句来替代if-else 。
按照惯例,我们首先学习switch语句的语法。
switch (expression)
{
case value1:
code_block1;
break;
case value2:
case value3:
code_block2;
break;
...
default:
code_blockN;
break;
}
switch语句允许表达式通过多路分支来控制程序执行的流程。通常,它包含一组case分支和一个default分支:
- 表达式是通往所有分支的大门,在 C# 7.0 之前,它必须是char、string、bool、int -like 和enum之一,之后,表达式可以是任意非空表达式。
- value是expression的候选。如果它与expression匹配,则选择此分支。
- code_block表示当前分支逻辑,如果为空,则跳转到下一个分支,如果不为空,则后面必须跟一个跳转语句,比如break,我们会在另一篇指南中学习跳转语句。
- default是所有case值都不匹配expression时的默认逻辑分支。如果你确保case覆盖了所有的解空间或者你不关心其余的情况,则可以省略它。
流程图
请看一下交换机流程图。它直观地显示了流量控制。
通过上面的流程图,我们可以搞清楚switch的执行过程:
- 使用 case值来匹配expression。
- 如果一个值匹配,则检查它是否具有code_block:
- 如果存在,则执行并退出。
- 如果没有,则继续寻找直到找到code_block。
- 如果没有值匹配,则选择默认分支。如果默认不存在,则直接退出。
实践
我们已经了解了switch的机制,现在是时候解决一个示例问题了:
string trafficLight = "Yellow";
// split logic based on trafficLight
switch (trafficLight)
{
case "Green":
Console.WriteLine("pass smoothly");
break;
case "Yellow": // fall through to "Red" branch
case "Red":
Console.WriteLine("slow down and stop");
break;
default: // rest conditions
Console.WriteLine("recognize failed, notify driver to decide");
break;
}
高级功能
我们已经了解了switch的基本功能。这对于大多数工作情况来说应该足够了。
但是仍然有一些高级功能,例如模式匹配中的类型模式(我们使用常量模式)或在case中使用when子句。如果您有兴趣了解更多信息,可以参考官方文档。
switch 与并行 if-else
Switch和并行if-else都会创建多个分支。
并行if-else更强大,因为每个分支的条件可以不同且复杂。相比之下,switch更直接,可读性更强。
所以对于多分支的情况,我们优先使用switch,如果switch无法完成这个任务,我们再使用并行的if-else。
另外, code_block的复杂度也是需要考虑的因素之一。虽然switch可以容纳和if-else一样复杂的逻辑,但还是建议使用简单的逻辑。对于复杂的逻辑,我们倾向于使用if-else,或者封装成方法。
条件选择的最佳实践
现在我们已经了解了if和switch语句,包括它们的变体。
我们将总结在特定场景中选择的最佳实践:
我们可以弄清楚做出决定的过程:
- 首先考虑的是分支机构号码。
- 如果只有一个分支,我们选择if。如果有两个,则选择if-else。
- 如果有两个以上的分支,我们进一步考虑:所有条件是否都匹配单个表达式?
- 如果是,则根据逻辑的复杂性做出决定。如果简单,则使用switch。否则,使用并行if-else。
- 如果不是,就分析一下逻辑关系,如果包含,就用嵌套的if-else,否则就用并行的if-else。
高级用法
配合迭代语句
我们在上一章中学习了迭代语句。条件语句和迭代语句的结合是一种常用的技巧。
<font style="vertical-align: inh
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~