2012-06-19 137 views
3

我怎麼能去這樣做,所以如果「如果」聲明是真實的,跳過foreach循環下面的代碼,並與程序的其他部分去C# - 的foreach循環與if語句

void() 
{ 
    foreach() 
    { 
     if() 
     { 

     } 
    } 

    //code I want to skip if "if" statement is true 

} 
+0

繼續關鍵詞來救援。如果你想跳出for循環,你可以使用'Break'。 – AlwaysAProgrammer

+2

太多的問題是不明確的。 Yogendra的評論可能取決於你的意思 – McAden

+0

你必須在if語句塊中聲明bool,並在你想跳過的區域使用它 –

回答

3

有沒有辦法直接做你想做的(沒有「轉到」標籤 - !滅亡的思想),但你可以用「破發」的關鍵字,並設置可以參考後面的變量。

void() 
{ 
    var testWasTrue = false; 
    foreach() 
    { 
     if() 
     { 
      testWasTrue = true; 
      break; // break out of the "foreach" 
     } 
    } 

    if(!testWasTrue) { 
     //code I want to skip if "if" statement is true 
    } 

} 
+0

不要打擾布爾值。做好工作,然後打破/返回。如果它是一個重要的代碼塊,則很容易爭論它應該是一個函數。看我下面的例子。 – dodexahedron

+0

除了這與你的回答完全不同。 – McAden

+2

因爲我們不知道他的邏輯,所以休息是無關緊要的。循環中可能存在需要針對所有項目執行的代碼。 – Jon

0
void() 
{ 
    bool skip = false; 
    foreach() 
    { 
     if() 
     { 
      skip = true; 
     } 
    } 

    if(!skip) 
    { 
     //code I want to skip if "if" statement is true 
    } 
} 
1

'break'關鍵字將跳出循環。

foreach (someClass a in someArray) 
{ 
    if(a.someProperty) // bool property 
    { 
    //Stuff to do if that condition is true 
    doSomethingElse(); 
    //Calling the break keyword will stop the loop and jump immediately outside of it 
    break; 
    } 
    //Other code to run for each iteration of the loop 
} 

//Here is where execution will pick up either after break is called or after the loop finishes 
0

只有我知道如何是一個布爾標誌。

void() 
{ 
    bool x = false; 
    foreach() 
    { 
    if() 
    { 
     x = true; 
     break; 
    } 
    } 
    if(!x) 
    { 
    //Code to skip if "if" statement is true. 
    } 
} 

不是超優雅,但容易。 編輯:12秒擊敗:)

+0

不需要布爾值。做好工作然後再打破。 – dodexahedron

1
void() 
{ 
    bool process = true; 
    foreach() 
    { 
      if() 
      { 
       process = false; 
       break; 
      } 
    } 

    if (process) 
    { 
     //code I want to skip if "if" statement is true 
    } 

} 
1

正如我在評論中提及您可以通過額外的bool變量做到這一點。

void() 
    { 
     bool positiveResult; // by default it gets false value 
     foreach() 
     { 
      if() 
      { 
       positiveResult = true; 
       // you may use "break" to skip the loop 
       break; 
      } 
     } 

     if(!positiveResult ) 
     { 
      //code I want to skip if "if" statement is true 
     } 

    } 
+0

無需遍歷整個集合。儘快休息或返回。另外,nix布爾值。根本不需要這個。 – dodexahedron

3

我知道這已經回答了,但我想我會在我的2美分扔,因爲沒有人認爲抽象的檢查,以一個單獨的方法:

void() 
{ 
    if (ShouldDoStuff(myCollection)) 
     DoStuff(myCollection); 
    else 
     DoOtherStuff(myCollection); 
} 

private bool ShouldDoStuff(collection) 
{ 
    foreach() 
    { 
     if() 
      return true; 
    } 
    return false; 
} 

這在提供更清潔的代碼處理你的算法的更高水平,並消除討論的所有混亂。它清楚地分離了檢查和執行動作的void()中的任務,讀者立即知道程序流程的確切內容,而無需通過布爾邏輯或中斷邏輯來辨別他們正在做什麼。沒有一種方法有超過1個責任或任務。

是的,這可能是海報想要在他們的foreach做其他工作,但這是一個完全不同的討論,而不是他們的問題中描述的。如果您只是想檢查給定集合(或對象)是否滿足特定條件,則可以將該檢查移至單獨的方法。即使將所有三個組件的自動化單元測試都打開了。

即使DoStuffDoOtherStuff不是抽象到他們自己的方法,它提供更好的可讀性和邏輯流。