2010-12-02 78 views
14

如果我有一個foreach循環,有沒有什麼辦法檢查一個布爾值?'foreach'循環是否可以進行條件檢查?

我不想在foreach()之內檢查一次,然後中斷例如。我想要foreach超過一個集合,並在同一時間評估是否有事。

例如,我不想做的事:

IEnumerable<Job> jobs = currentJobs; 

    foreach(Job job in jobs) 
    { 
     if (found) 
      break; 
    } 
+0

你能提供一個例子嗎?我對你的意思有點模糊......這意味着其他人也可能感到困惑。 – 2010-12-02 14:26:21

+0

你能提供更多的細節和/或例子嗎? – LukeH 2010-12-02 14:26:34

+1

你的意思是像foreach(var item in MyList.Where(condition)) – Kikaimaru 2010-12-02 14:27:52

回答

14

你總是可以把它變成一個for循環。

for (i = 0; i < jobs.Count && booleanTrue; i++) { 
// do a lot of great stuff 
} 

您還需要改變工作從IEnumerableIList。我認爲IList會更好地爲您的目的服務。 IEnumerable在您需要它們之前,懶惰會評估這些元素,並且不包含關聯的集合幫助器方法。

1

不,一個foreach只適用於每個元素。

您可以在常規的for(a; b; c)循環中合併多個條件。像for(a; b && x; c)

9

不是很喜歡它,但也許一些LINQ?

bool yourBool = false; 
foreach(var item in 
    collection.TakeWhile(x => yourBool)) 
{...} 

11

嘗試使用TakeWhile

從例如:

string[] fruits = { "apple", "banana", "mango", "orange", 
          "passionfruit", "grape" }; 

    IEnumerable<string> query = 
     fruits.TakeWhile(fruit => String.Compare("orange", fruit, true) != 0); 

    foreach (string fruit in query) 
    { 
     Console.WriteLine(fruit); 
    } 

     /* 
     This code produces the following output: 

     apple 
     banana 
     mango 
     */ 
2

我是否理解正確,你

  1. 有一個元素序列
  2. 要採取一些行動,每一個元素
  3. 但你想打破你遇到的第一個元素,其中一些條件是真的?

我不明白使用foreach循環的阻力;我想要麼你有什麼堅持或

foreach(var job in jobs.TakeWhile(x => someCondition(x)) { 
    someAction(job); 
} 
5

我找到了另一種方法:

 foreach (var car in cars) if (!rentedCars.Contains(car)) 
     { 
      // Magic 
     }