2012-07-25 63 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是一個花哨的轉到。您可以使用遞歸來代替。