2012-02-05 59 views
2

我有這樣的代碼:我怎樣才能繼續上面的圈

foreach(int i in Directions) 
     { 
      if (IsDowner(i)) 
      { 
       while (IsDowner(i)) 
       { 
        continue; 
        //if (i >= Directions.Count) 
        //{ 
        // break; 
        //} 
       } 

       //if (i >= Directions.Count) 
       //{ 
       // break; 
       //} 

       if (IsForward(i)) 
       { 

         continue; 
         //if (i >= Directions.Count) 
         //{ 
         // break; 
         //} 

        //check = true; 
       } 

       //if (i >= Directions.Count) 
       //{ 
       // break; 
       //} 

       if (IsUpper(i)) 
       { 
         //if (i >= Directions.Count) 
         //{ 
         // break; 
         //} 
        num++; 
        //check = false; 
       } 

       //if (check) 
       //{ 
       // num++; 
       //} 
      } 
     } 

,但我希望有continueforeachwhile循環。我怎樣才能做到這一點?

+0

相關:http://stackoverflow.com/questions/8497247/break-nested-loops – CodesInChaos 2012-02-05 10:03:42

回答

6

你可以breakwhile循環,轉移到外foreach循環的下一次迭代將開始一個新的while循環:如果您在while循環後有一些其他的代碼

foreach(int i in Directions) 
{ 
    while (IsDowner(i)) 
    { 
     break; 
    } 
} 

那你不希望在這種情況下執行,你可以使用一個布爾變量,它將在跳出while循環之前設置,以便此代碼不會執行並自動跳轉到forach循環的下一次迭代中:

foreach(int i in Directions) 
{ 
    bool broken = false; 
    while (IsDowner(i)) 
    { 
     // if some condition => 
     broken = true; 
     break; 
    } 

    if (broken) 
    { 
     // we have broken out of the inner while loop 
     // and we don't want to execute the code afterwards 
     // so we are continuing on the next iteration of the 
     // outer foreach loop 
     continue; 
    } 

    // execute some other code 
} 
+0

但我有while循環後的另一個代碼,我想要他們和下一個foreach變量(我)。 – 2012-02-05 09:55:39

+0

@ahmadalishafiee,你可以使用布爾變量。 – 2012-02-05 09:56:53

+0

編輯的問題。但用你的方式有很多嵌套,如果在我的代碼 – 2012-02-05 09:57:03

5

您不能從內部循環繼續外部循環。 你有兩個選擇:

  1. 壞一個:打破了之前的內環設置一個布爾標誌,然後檢查這個標誌,並繼續將其設置。

  2. 好的一個:只需將你的大型代碼重構爲一組函數,這樣就沒有內部循環。

4

在我看來,使用轉到是複雜的嵌套循環中合理的(你是否應該避免使用複雜的嵌套循環是一個不同的問題)。

你可以這樣做:

foreach(int i in Directions) 
{ 
    while (IsDowner(i)) 
    { 
     goto continueMainLoop; 
    } 
    //There be code here 
continueMainLoop: 
} 

只是要小心,如果其他人要處理的代碼,確保他們不會轉到恐懼症。

0

,你可以嘗試使用謂詞內像循環:

foreach (item it in firstList) 
    { 
     if (2ndList.Exists(x => it.Name.StartsWith(x))) //use predicate instead of for loop. 
      { 
       continue; 
      } 
    } 

希望這有助於你。