2009-10-06 112 views
-1

我正在爲多個if語句編寫for循環。For循環 - 如果布爾條件計算結果爲false,則繼續

如果for語句中的if語句(或其中的一部分)計算結果爲false,那麼循環不會退出,但循環的迭代次數增加1,並繼續循環(我需要功能像continue;關鍵字)。

例子:

for (int i = 0; i <= Collection.Count && Collection[i].Name != "Alan"; i++) 
{ 
    // If name is not Alan, increment i and continue the loop. 
} 

這可能嗎?

感謝

+3

示例代碼將是一個很大的幫助。我不知道你的意思是「如果語句評估爲false」,如果發生這種情況,那麼內部的東西不會被執行,並且循環會像平常一樣繼續。 – DisgruntledGoat 2009-10-06 22:37:08

+0

提供示例代碼。 – abelenky 2009-10-06 22:40:41

回答

16

你需要像continue關鍵字功能 - 你考慮過使用continue關鍵字,然後呢?

更新:您的示例代碼很難破譯的意圖。

for (int i = 0; i <= Collection.Count && Collection[i].Name != "Alan"; i++) 
{ 
    // If name is not Alan, increment i. 
} 

for loop有三個部分,用兩個分號隔開。第一部分初始化循環變量。第二部分是每次迭代即將開始時評估的表達式;如果它是假的,則循環終止。第三部分在每次迭代後執行。

因此,上面的循環將在遇到的第一個「Alan」時退出,並且每次完成迭代時它都會增加i。最後,如果沒有Alans,它將執行最後一次i等於Collection.Count,這比集合中的最大有效索引大一個。因此,當你嘗試訪問Collection[i]i超出範圍,它肯定會拋出異常。

也許你想這樣的:

foreach (var item in Collection.Where(i => i.Name != "Alan")) 
{ 
    // item is not an "Alan" 
} 

你可以認爲Where擴展方法篩選集合的方式。

如果這看起來不起眼,就可以實現與continue關鍵字一樣的東西(如你猜):

foreach (var item in Collection) 
{ 
    if (item.Name == "Alan") 
     continue; 

    // item is not an "Alan" 
} 

或者你可以把代碼中的if的塊:

foreach (var item in Collection) 
{ 
    if (item.Name != "Alan") 
    { 
     // item is not an "Alan" 
    } 
} 
+0

感謝您的解釋。我知道Where()方法,但認爲可以像上面那樣處理事情,但我想這不是正確的方法!謝謝。 – dotnetdev 2009-10-06 22:58:49

1

你的意思是這樣嗎?

for (int i = 0; i < 100;) { 
    if (!condition1) { 
     i++; 
    } 
    if (!condition2) { 
     i++; 
    } 
    if (!condition3) { 
     i++; 
    } 
} 

你是否希望增量器完成for循環在循環體中?

1

我不知道我的理解是否正確。你有一個for循環這樣的事情

for (int i = 0; i < 10; i++) 
{ 
    // do something 
    if (!b1) 
     i++ 

    // do something 
} 

編輯:

如果繼續使用它增加了我一次。如果你在循環中使用i ++,它顯然會增加兩倍。如果你只想在某個條件下進行修改,可以使用for循環,如下所示:

for(int i = 0; i < 10)//這與while循環非常相似。

0

從您的示例代碼中,我認爲您正在搜索名稱「Alan」。 這是正確的嗎?

如果是這樣,你的結構像循環:

for (int i = 0; i < Collection.Count; i++) 
{ 
    if (Collection[i].Name == "Alan") 
    { 
     break; // We found the name we wanted! 
    } 

    // Otherwise: Keep going to look for the name further on. 
} 

if (i == Collection.Count) 
{ 
    Console.WriteLine("Alan is not found"); 
} 
else 
{ 
    Console.WriteLine("Alan found at position {0}", i); 
}