2010-12-02 55 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 
     }