C# for continue 在 foreach [重复]

Posted

技术标签:

【中文标题】C# for continue 在 foreach [重复]【英文标题】:C# for continue inside foreach [duplicate] 【发布时间】:2012-07-25 16:52:54 【问题描述】:

可能重复:continue and break with an extended scope

我有一个问题。我不知道如何在 foreach 中为“for”调用 c​​ontinue。

代码:

for(int i = 0; i < ...; i++)

  foreach(´´ .. in ´´)
  
    if(,,.Value == null)
      // A!
  

我需要替换“A!”代码继续“for”!不是foreach。我使用了基本的继续,但它仅适用于 foreach。

已解决 与:

for(int i = 0; i < ...; i++)

  bool Ab = false;

  foreach(´´ .. in ´´)
  
    if(,,.Value == null)
      Ab = true;
  

  if(Ab)
    continue;

【问题讨论】:

你在循环什么样的对象?可能有比使用 foreach... if... 反模式更好的方法。 您不能,您需要使用一个变量将该信息传递给 for 循环。顺便说一句,如果你接受一些答案,你会得到更好的回应。 尝试break而不是在你的foreach循环中继续,这将导致执行退出foreach并继续for循环 我认为this 可能是(可能不令人满意的)答案。 【参考方案1】:

如果你需要停止内循环,并继续外循环,你只需要在内循环中的一个break语句

for(int i = 0; i < ...; i++)
   
    foreach(var thing in something)   
         
        if(thing.Value == null)       
        
            break; 
         
    

【讨论】:

但是我如何在休息时调用 continue 呢?有任何“如果”吗? `break' 语句停止内循环(你想要什么),然后继续外循环(你想要什么),所以我不确定你还需要什么。如果您有一些特定的需求,这不起作用,您需要在您的问题中发布更多代码,以便我们确切地知道您要做什么。【参考方案2】:

如果那是您的实际代码结构,您可以从foreachbreakfor 将立即继续下一次迭代,因为当前的迭代已经结束。

但是,如果在完成 foreach 循环后,您在 for 迭代中有更多代码,那么您可能会遇到一种罕见的情况,其中(妈妈们,请保护您孩子的耳朵)您可能想要使用goto 跳到当前for 迭代的末尾。

不过,更简洁的方法是设计内部循环,使其出现在外部循环的末尾,这样内部循环中的 break 就是外部循环的 continue

【讨论】:

把水倒在我灼热的耳朵上。是的,他们给你goto 命令,因为他们知道如果他们不这样做,那么某个地方的某个人会想出一个根本无法以任何其他方式解决的情况。但是,最后一段是“教学答案”;应该给那些试图学习如何正确编码的人。使用goto是一种很臭的代码味道,随时随地。【参考方案3】:

您不能只使用break 内部foreach 循环吗?

for (int i = 0; i < blah; i++) 
  foreach (var item in collection) 
    if (ShouldContinue(item)) 
      break;
    
    // other stuff
  
  // don't put things here

如果您需要我将don't put things here 放在其中的代码,如果您将内部循环包装在一个函数中可能会更清晰:

bool ProcessOrContinue(IEnumerable collection) 
  foreach (var item in collection) 
    if (ShouldContinue(item)) 
      return true;
    
    // other stuff
  
  return false;


for (int i = 0; i < blah; i++) 
  if (ProcessOrContinue(collection)) continue;
  // more things

【讨论】:

【参考方案4】:

Continue 是一个花哨的 goto。你可以在这里使用递归。

【讨论】:

以上是关于C# for continue 在 foreach [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 的 foreach 用不了 break/continue?同样写法下 for 循环也不行

C# - 带有 if 语句的 Foreach 循环

Kotlin 之 forEach 跳出循环

在Java8的foreach()中使用return/break/continue,不会跳出循环

C# 在一行中继续 ForEach

JavaScript中for循环的break,continue和return。