C# 条件语句全面演练第 1 部分 - if、else
介绍
当你开始学习 C# 之类的编程语言时,最重要的概念之一就是流程控制。我们知道程序是由语句组成的。我们组合这些语句的方式使程序更加强大。这就是流程控制的职责:控制程序执行的流程。
在许多情况下,一个接一个的顺序执行是不够的。因此,流程控制提供了许多有用的语句,例如条件语句、迭代语句、跳转语句和其他高级功能。在本指南中,我们将重点介绍 C# 中的一个重要流程控制:条件语句。
条件语句被广泛使用,甚至在莎士比亚的名言中也有使用:
生存还是毁灭,这就是~~问题~~条件语句。
这是一个笑话,但我们确实要在本指南中学习如何编码这句话。
由于这是针对初学者的指南,我会尽力使用生动的视觉效果和示例来帮助您理解。
- 首先,我将从一个有趣的场景开始。
- 接下来我会把各种条件语句的代码模板和流程图展示给大家。
- 此外,我们还将对它们进行比较并总结最佳实践。
- 最后我们来说一下高级用法。
本指南(第 1 部分)将重点介绍基本概念并介绍最重要的条件语句:if-else语句。
入门
有些读者可能会好奇:什么是条件语句?为什么我们需要它?
让我们回到那句名言“生存还是毁灭”。
我们可以注意到,逻辑被分成了两个分支:选择“是”的结果和选择“不是”的结果。顺序执行无法完成这个任务。所以我们需要条件语句来帮助我们。
string hamletChoice = "to be";
if (hamletChoice == "to be")
{
// hamlet chose "to be"
Console.WriteLine("suffer the slings and arrows of outrageous fortune");
}
else
{
// otherwise, hamlet chose "not to be"
Console.WriteLine("take arms against a sea of troubles, and by opposing end them");
}
实际上,这段代码非常直观且不言自明,对吗?
如果条件为真,则执行if块。如果不为真,则执行else块。
当您的程序需要逻辑分支时,这是解决问题的最基本的条件语句。
if 语句
设想
想象一下这样的场景:
我们来开发一款简单的问候机,它会在特定的时间说问候语,比如“早上好”或者“周末愉快”。
在这种情况下,if语句是合适的。
句法
在此之前,我先介绍一下C#中if的语法,这是代码模板:
if (condition)
{
if_block;
}
else
{
else_block;
}
if语句由condition、if_block和else_block组成。
- condition是一个布尔表达式。它决定执行if_block还是else_block。
- if_block表示条件为真时的逻辑。它可以包含多个语句,甚至可以包含另一个if块。
- else_block表示条件不成立时的逻辑,可选,当else中没有逻辑时,删除else分支。
流程图
我画了一个if-else语句的流程图,以帮助您更好地理解流程控制。
我们可以根据流程图来了解这个过程:
- 检查是否满足条件。
- 如果条件满足,则处理if_block中的逻辑。
- 如果不是,则处理else_block中的逻辑。else_block是可选的,因为有时我们不关心else分支。
实践
单if版本
在第一个版本中,当星期六或星期日的时候,问候机就会说“周末愉快!该玩了!”
我们先从第一个版本开始。显然,我们只需要if分支:
// get current time
DateTime now = DateTime.Now;
// if it is Saturday or Sunday
if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)
Console.WriteLine("Happy weekend! It's time to have fun!");
关于省略花括号的讨论
如上例所示,如果块中只有一个语句,我们可以省略花括号{} 。
但这是最佳做法吗?
对此,大家的看法不一。至于这里关于是否省略花括号的讨论,省略花括号可以让代码更简洁,可读性更强,但有时在根据为什么省略花括号被认为是一种不好的做法?重构代码时可能会带来潜在的 bug 。
我参考了这个建议,它可能会对你的决定有帮助。
每个开发人员/团队都有他/她/他们自己的惯例,但 Stylecop 默认规则已启用,可以警告您此类违规行为。
底线是,你应该使用你最喜欢的、适合你的惯例,实践只不过是指导,而不是一成不变的。
if-else 版本
在第二个版本中,当时间在下午 5:00 之前时,它会说“早安”。否则,它会说“晚安”。
对于这个新版本,我们需要其他人来处理其余的情况。
DateTime now = DateTime.Now;
// DateTime uses 24-hour time system, 17:00 is 5:00 pm
if (now.Hour < 17)
Console.WriteLine("good day"); // before 17:00
else
Console.WriteLine("good night"); // after 17:00
组合
包容/嵌套
第三个版本中,下午5点以后才说“晚上好”,并根据性别附加“先生”或“女士”后缀。
我们可以看到这个需求中有两个if语句。它们之间的关系是包容性的,正如我所解释的那样,if_block可以包含另一个if语句。因此,我们以嵌套的方式将它们组合在一起:
DateTime now = DateTime.Now;
string gender = 'female';
// DateTime uses 24-hour time system, 17:00 is 5:00 pm
// first check the hour
if (now.Hour > 17)
{
// then check the gender
if (gender == 'male')
Console.WriteLine("good evening, sir");
else
Console.WriteLine("good evening, madam");
}
平行线
在最后一个版本中,当时间在 12:00 am 之前时,会说“早上好”,当时间在 12:00 am 到 5:00 pm 之间时,会说“下午好”,其余时间会说“晚上好”。
虽然把0点-12点分配到上午不太合适。
我们可以通过使用嵌套技术来实现这一点。首先按“上午”拆分,然后在else中按“下午”拆分。
// nested if statements
DateTime now = DateTime.Now;
if (now.Hour < 12) // 0:00 - 12:00
{
Console.WriteLine("good morning");
}
else // 12:00 - 24:00
{
if (now.Hour < 17)
{
Console.WriteLine("good afternoon"); // 12:00 - 17:00
}
else
{
Console.WriteLine("good evening"); // 17:00 - 24:00
}
}
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~