关键词:
【中文标题】如何打破嵌套的foreach循环然后转到c#上的父foreach循环【英文标题】:How to break nested foreach loop then go to parent foreach loop on c# 【发布时间】:2013-07-09 13:47:31 【问题描述】:我有以下代码:
foreach(// Some condition here)
while (// Some condition here)
foreach (// Some condition here)
if (// Condition again)
//Do some code
if (// Condition again)
//Stop the first foreach then go back to first foreach
我想要做的是,当我在最后一个 foreach
循环上点击第二个 if
语句时,是在第一个 foreach
循环上返回。
注意:如果第二个if
语句不为真,它应该继续最后一个foreach
循环,直到条件不为真。
提前致谢!
【问题讨论】:
放入一个方法并返回 在我看来像一个递归函数.. 不会break;
帮忙吗?
@rapsalands break
只会退出当前循环,在这种情况下是最里面的foreach
。 OP想要退出两个内部循环,即最里面的foreach
和while
。
【参考方案1】:
直接解决此问题的唯一方法是使用goto
。
另一个(更好的)选择是重组直到问题消失。例如,通过将内部代码(while + foreach)放入方法中并使用 return 返回。
【讨论】:
就像一个注释,我的老大学讲师明确表示他会让任何使用goto
的人失败:)
我认为我应该做第二个选项,我应该将 while 和 foreach 放在一个新方法上。感谢您的建议!
@Sayse 那位讲师是个白痴。举个简单的例子,在 C uses gotos 中进行清理的惯用方式。由于对 goto 的偏见,各种 C 邮件列表上的新程序员都会尝试反对它,然后有人必须解释为什么存在这个习语。
我不喜欢 goto 的。在教学生时,避免使用它们是一个好方法。重点是让他们学会使用正确的循环结构并思考程序流程。经过几年的实践,开发人员学会了一种风格并知道什么时候使用 goto 是合适的。叫老师的名字也没有用。
想一想,我们早期有一个 C 语言老师,他让任何使用 return 语句中间函数的人都失败了),这使得代码更难看,但绝对教会了我们逻辑。我想我可以肯定地说,当 C# 带有 yield
声明时,他死于心脏病发作。【参考方案2】:
类似这样的:
resetLoop = false;
for(// Some condition here)
while (// Some condition here)
foreach (// Some condition here)
if (// Condition again)
//Do some code
if (// Condition again)
//Stop the first foreach then go back to first foreach
resetLoop = true;
break;
if (resetLoop) break;
if (resetLoop)
// Reset for loop to beginning
// For example i = 0;
【讨论】:
我发布了相同的代码,最好的服务,感谢你。但出于对所有神圣事物的热爱,请在您的代码前加上//Here be dragons
,这样新手编码人员就不会认为这是正确的编码方式【参考方案3】:
还没有人提到它(Henk 简要提到过),但最好的方法是将你的循环移动到它自己的方法中并使用 return
public ReturnType Loop(args)
foreach outerloop
foreach innerLoop
if(Condition)
return;
【讨论】:
【参考方案4】:我看到你接受了这个人提到你的 goto 语句的答案,在现代编程和专家意见中 goto 是一个杀手,我们称它为编程中的杀手,有一些特定的原因,我不会讨论此时就到这里了,但是您的问题的解决方案非常简单,您可以在这种情况下使用布尔标志,就像我将在我的示例中演示的那样:
foreach(// Some condition here)
//solution
bool breakme = false;
while (// Some condition here)
foreach (// Some condition here)
if (// Condition again)
//Do some code
if (// Condition again)
//Stop the first foreach then go back to first foreach
breakme = true;
break;
if(breakme)
break;
简单明了。 :)
【讨论】:
感谢您的回答。但是,如果您阅读了我对该答案的评论,我会遵循他的第二个建议,即把它放在一个新方法上。 :) 很高兴...我没有阅读您的评论,没关系,我告诉了您我的建议,现在由您决定... :)【参考方案5】:正如我之前所说,我还建议重构代码,看看是否绝对有必要让 3 个循环相互嵌套。 如果是,并且我认为其中涉及一些逻辑,您应该考虑拆分为子函数(如建议的那样)
对于一个简单的代码解决方案:
foreach(// Some condition here)
var broke = false;
while (// Some condition here)
foreach (// Some condition here)
if (// Condition again)
//Do some code
if (// Condition again)
//Stop the first foreach then go back to first foreach
broke = true;
break;
if (broke) break;
// continue your while loop
【讨论】:
【参考方案6】:var broken = false;
foreach(// Some condition here)
broken = false;
while (!broken && // Some condition here)
foreach (// Some condition here)
if (// Condition again)
//Do some code
if (// Condition again)
//Stop the first foreach then go back to first foreach
broken = true;
break;
【讨论】:
如何打破 Java 中的嵌套循环?
】如何打破Java中的嵌套循环?【英文标题】:HowdoIbreakoutofnestedloopsinJava?【发布时间】:2009-05-2009:07:43【问题描述】:我有一个这样的嵌套循环结构:for(Typetype:types)for(Typet:types2)if(somecondition)//Dosomethingandbreak...break;//Breaksoutoftheinne... 查看详情
如何在 laravel 刀片视图中打破 foreach 循环?
】如何在laravel刀片视图中打破foreach循环?【英文标题】:Howtobreakaforeachloopinlaravelbladeview?【发布时间】:2017-12-2415:56:20【问题描述】:我有一个这样的循环:@foreach($dataas$d)@if(condition==true)$d//HereIwanttobreaktheloopinaboveconditiontrue.@endi... 查看详情
如何打破 Objective-C 中的两个嵌套 for 循环?
】如何打破Objective-C中的两个嵌套for循环?【英文标题】:HowcanIbreakoutoftwonestedforloopsinObjective-C?【发布时间】:2010-10-2604:16:25【问题描述】:我有两个这样嵌套的for循环:for(...)for(...)我知道有一个break声明。但是我很困惑它是打... 查看详情
如何打破 Dart 中的嵌套循环
】如何打破Dart中的嵌套循环【英文标题】:HowtobreakoutofnestedloopsinDart【发布时间】:2022-01-1421:15:38【问题描述】:给定以下嵌套循环:for(inti=0;i<10;i++)for(varj=0;j<10;j++)print(\'i:$i,j:$j\');如果我在内部循环中添加break语句:for(inti=... 查看详情
如何在 TypeScript 中打破 ForEach 循环
】如何在TypeScript中打破ForEach循环【英文标题】:HowtobreakForEachLoopinTypeScript【发布时间】:2019-01-1518:15:33【问题描述】:我有以下代码,在某些情况下我无法打破循环。isVoteTally():booleanletcount=false;this.tab.committee.ratings.forEach(element=... 查看详情
交替循环嵌套的foreach循环(代码片段)
我试图从一个foreach循环打印一个值。然后转到另一个foreach循环并继续直到两个数组中的最后一个元素。@list=(10,20,30,40,50);@list1=(15,25,35,45,55);OUTER:foreach$a(@list)print"valueofa:$a";foreach$b(@list1)print"valueofb:$b";nextOUTER;这将从第二个foreach循... 查看详情
如何跳过“foreach”循环的迭代?
】如何跳过“foreach”循环的迭代?【英文标题】:HowdoIskipaniterationofa`foreach`loop?【发布时间】:2010-10-1320:06:24【问题描述】:在Perl中,我可以使用next;命令跳过foreach(或任何循环)迭代。有没有办法跳过一个迭代并跳转到C#中的... 查看详情
中断内部 foreach 循环并继续外部 foreach 循环
】中断内部foreach循环并继续外部foreach循环【英文标题】:Breakinnerforeachloopandcontinueouterforeachloop【发布时间】:2011-11-1714:17:10【问题描述】:如果我有一个嵌套的foreach循环,我该如何打破内循环并告诉外循环在该点继续,而不在... 查看详情
我如何打破 foreach 语句,回显其他内容然后继续
】我如何打破foreach语句,回显其他内容然后继续【英文标题】:Howcanibreakaforeachstatement,echosomethingelseandthencontinue【发布时间】:2012-09-0210:33:20【问题描述】:我从MSQL数据库中获取了两个不同的数组数据数组,第一个数组来自我... 查看详情
如何在 R 中嵌套 foreach 循环的内循环和外循环之间添加代码
】如何在R中嵌套foreach循环的内循环和外循环之间添加代码【英文标题】:HowcanIaddcodebetweentheinnerandouterloopsofnestedforeachloopsinR【发布时间】:2021-08-0607:39:15【问题描述】:我了解到在R中执行嵌套foreach循环的正确方法是通过嵌套运... 查看详情
如何从嵌套的 ForEach 循环中获取连续的索引号?
】如何从嵌套的ForEach循环中获取连续的索引号?【英文标题】:HowtogetcontinuousindexnumbersfromnestedForEachloop?【发布时间】:2021-11-1716:58:57【问题描述】:我正在为我的小部件扩展使用4块网格。我想用一组元素填充这些网格。letexampl... 查看详情
c#减少嵌套循环(代码片段)
...真的非常影响性能。当然,除了关注明显的循环例如for、foreach,还应该关注隐晦一点的循环,例如datatable.select(),linq之类的list.where、list.find等。要优化,排除业务问题,要考虑的就是代码技术了。看到循环查找数据,尽可能向... 查看详情
c#网页之间的跳转语句
...用它跳出某个case语句。实际上,break也可以用于退出for、foreach、while或do…while循环,循环结束后,就执行循环后面的语句。 如果该语句放在嵌套的循环中,就执行最内部循环后面的语句。如果break放在switch语句或循环外部,... 查看详情
如何在 C# 中连接由 foreach 循环大写的文本?
】如何在C#中连接由foreach循环大写的文本?【英文标题】:HowcanIconcatenateatextcapitalizedbyaforeachloopinC#?【发布时间】:2022-01-2319:11:45【问题描述】:usingSystem;classProgrampublicstaticvoidMain(string[]args)stringText="thesentencewhicheachwordmustbecap 查看详情
打破 JavaScript 中嵌套循环的最佳方法是啥?
】打破JavaScript中嵌套循环的最佳方法是啥?【英文标题】:What\'sthebestwaytobreakfromnestedloopsinJavaScript?打破JavaScript中嵌套循环的最佳方法是什么?【发布时间】:2010-09-1600:55:29【问题描述】:在Javascript中打破嵌套循环的最佳方法... 查看详情
有啥办法可以打破 foreach 循环?
】有啥办法可以打破foreach循环?【英文标题】:Isthereanywaytobreakoutofaforeachloop?有什么办法可以打破foreach循环?【发布时间】:2013-04-1109:16:46【问题描述】:我正在使用R包foreach()和%dopar%并行进行长时间(~天)计算。如果其中一... 查看详情
打破parallel.foreach?
】打破parallel.foreach?【英文标题】:Breakparallel.foreach?【发布时间】:2012-09-1606:25:53【问题描述】:如何跳出parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(),newAction<Color... 查看详情
打破R中的嵌套循环
】打破R中的嵌套循环【英文标题】:BreakingoutofnestedloopsinR【发布时间】:2016-09-3023:04:11【问题描述】:非常简单的示例代码(仅供演示,完全没用):repeatwhile(1>0)for(iinseq(1,100))break#usuallytiedtoaconditionbreakbreakprint("finished")我想... 查看详情