3

可能重复:
继续并在扩展范围内中断

我有一个问题。我不知道如何在 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;
}
4

4 回答 4

3

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

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

}

于 2012-07-25T16:57:24.447 回答
1

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

但是,如果您在for循环完成后的迭代中有更多代码foreach,那么您可能会遇到一种罕见的情况,即(母亲,保护孩子的耳朵)您可能希望使用 agoto跳到当前的末尾for迭代。

不过,更简洁的方法是塑造内部循环,使其出现在外部循环的末尾,这样break内部循环中的 acontinue就是外部循环的 a。

于 2012-07-25T16:57:26.833 回答
0

你不能只是breakforeach循环吗?

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
}
于 2012-07-25T16:56:52.883 回答
0

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

于 2012-07-25T17:02:04.410 回答