2012-07-25 62 views
3

可能重复:
continue and break with an extended scopeC#为继续里面的foreach

我有一个问题。我不知道如何在foreach内部继续调用“for”。

代码:

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; 
} 
+3

你在循环什么样的对象?有可能比使用foreach ...更好的方法...如果...反模式。 – 2012-07-25 16:55:31

+0

您不能,您需要使用变量将该信息传递给for循环。顺便说一句,如果你接受一些答案,你会得到更好的答复。 – Jodrell 2012-07-25 16:56:23

+0

尝试'break'而不是继续在你的foreach循环中,这会导致执行从'foreach'掉下来并继续'for'循环 – Nathan 2012-07-25 16:56:38

回答

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 
} 
2

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

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

}

+0

但我怎么能打电话继续休息?这是否有“如果”? – user1085907 2012-07-25 17:46:22

+0

'break'语句停止内部循环(你想要的),然后继续外部循环(你想要的),所以我不知道你需要什么。如果你有一些特定的需求,这不起作用,你需要在你的问题中发布更多的代码,以便我们确切地知道你想要做什么。 – 2012-07-25 18:57:25

1

如果这是您的实际代码结构,您可以从foreach中的breakfor立即继续下一次迭代,因为当前的结束。

但是,如果你在foreach循环完成后for迭代更多的代码,你可以在那些罕见箱子其中(母亲,保护孩子的耳朵)一个你可能希望使用goto跳过当前for迭代的结尾。

尽管如此,更简洁的方法是设计内部循环,使其发生在外部循环的末尾,使得内部循环中的break是外部循环的continue

+0

*把水倒在我的耳朵上*。是的,他们会给你“goto”命令,因为他们知道他们是否不知道,然后某个人在某个地方会想出一个根本无法以其他方式解决的情况。但是,最后一段是“教学答案”;应该给予试图学习如何正确编码的人。随时随地使用'goto'是一种非常臭的代码味道。 – KeithS 2012-07-25 17:19:11

0

Continue是一个花哨的转到。您可以使用递归来代替。