C# 迭代语句全面演练第 3 部分 - 高级用法
介绍
while 与 for
为了搞清楚while循环和for循环的特点和应用场景,我们来比较一下while循环和for循环。
思考如何将for和while相互转换。
for -> while:将初始化程序放在while循环之前,将update_expression放在code_block之后。
// for template
for (initializer; condition; update_expression)
{
code_block;
}
// rewritten for by while
initializer; // execute initializer before while loop
while (condition)
{
code_block;
update_expression; // execute update-expression after code_block
}
while -> for:只忽略初始化程序和update_expression。
// while templates
while (condition)
{
code_block;
}
// rewritten while by for
for (;condition;) // initializer and update_expression stay empty
{
code_block;
}
从上面的约定策略中,我们可以得出结论:for是while的一个特例,在需要初始化和更新循环变量的情况下更实用、更易读。
循环选择的最佳实践
现在我们已经了解了所有这四个迭代语句以及它们之间的比较。
我们将总结最佳实践,以便在特定场景中选择最佳做法:
我们可以按照下面的流程来做出决定:
- 首先,问问自己,“这是一个带有集合的循环吗?”
- 如果是,我们再判断用for还是foreach,如果是正序访问元素,不需要修改集合,也不需要操作索引,那么可以选择foreach,否则就选择for。
- 如果答案是否定的,我们必须进一步考虑, “它在检查条件之前是否处理逻辑?”如果是,那么do while是最好的选择。
- 最后一步:如果循环逻辑需要初始化程序或update_expression代码部分,我们使用for。其余情况下请选择while 。
下面是一个维恩图,可以直观地向您展示循环使用的适当范围:
高级用法
配合Jump语句
对于实际场景中一些比较复杂的情况,在循环执行时,可能会触发某些逻辑来改变控制流,这就需要配合跳转语句来实现。
例如,使用continue跳过其余语句并继续进行下一次迭代,或者使用break跳出循环,或者使用goto、return或throw语句退出循环。
我将在另一份指南中讨论跳转语句:C# 跳转语句综合演练第 1 部分 - break、continue。
无限循环
由于循环中的所有部分都可以是可选的,当条件为空或true时,它将导致无限循环。它将永远执行循环逻辑,直到你拔掉电脑电源:
// infinite for loop
for (;;)
{
Console.WriteLine("I am trapped in loop. Is anybody here?");
}
// infinite while loop
while (true)
{
Console.WriteLine("I am trapped in loop again. Please help me!");
}
大多数情况下,应该避免无限循环。不过不用担心,正如刚才提到的,跳转语句是无限循环的完美助手。
嵌套循环
我提到过code_block可以包含另一个循环块。这称为嵌套循环。
那么,如何实现嵌套循环?
简单地说,我们可以用另一个循环替换code_block的全部或部分。
让我们用一个嵌套循环的简单场景来练习一下:
现在我们开发最后一个机器人:管家机器人,它可以帮助我们管理我们的物品。
这是一个有 2 x 3 个单元格的书架,我们想问它这个书架上有多少本书。
int[,] bookshelf = new int[2, 3] {
{11, 7, 10},
{9, 15, 12},
};
int sum = 0;
// iteration for the first dimension
for (int i = 0; i < bookshelf.GetLength(0); ++i)
{
// iteration for the second dimension
for (int j = 0; j < bookshelf.GetLength(1); ++j)
{
sum += bookshelf[i, j];
}
}
Console.WriteLine("there are {0} books on this bookshelf", sum);
// output: there are 64 books on this bookshelf
创建一个嵌套循环来索引二维数组。外层循环是针对第一维的迭代,内层循环是针对第二维的迭代。
结论
在本指南中,我们比较了迭代语句(while、do while、for、foreach),并总结了循环选择的最佳实践。此外,我们还探索了高级用法,包括跳转语句、无限循环和嵌套循环。
由于这是结尾,所以我绘制了一张思维导图来帮助大家整理和复习这一系列的知识。
本指南是 C# 流控制指南系列之一:
- C# 迭代语句综合演练第 1 部分 - while、do
- C# 迭代语句综合演练(第二部分)- for、foreach
- C# 迭代语句全面演练第 3 部分 - 高级用法
- C# 条件语句全面演练第 1 部分 - if、else
- C# 条件语句全面演练第 2 部分 - switch
- C# 跳转语句全面演练第 1 部分 - break、continue
- C# 跳转语句全面演练(第二部分)- goto
希望你喜欢。如果您有任何疑问,欢迎通过 recnac@foxmail.com 与我联系。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~