如果我有一个foreach
循环,有没有办法检查一个布尔值?
我不想在foreach()
内部检查一次,然后打破例如。我希望foreach
对一个集合进行评估,同时评估某些事情是否属实。
例如,我不想这样做:
IEnumerable<Job> jobs = currentJobs;
foreach(Job job in jobs)
{
if (found)
break;
}
答案 0 :(得分:19)
尝试使用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
*/
答案 1 :(得分:15)
你总是可以把它变成for循环。
for (i = 0; i < jobs.Count && booleanTrue; i++) {
// do a lot of great stuff
}
您还需要将作业从IEnumerable
更改为IList
。我认为IList
会更好地满足您的目的。 IEnumerable
lazy在您需要之前对元素进行求值,并且不包含关联的集合助手方法。
答案 2 :(得分:11)
不是非常喜欢它,但也许是一些LINQ?
bool yourBool = false;
foreach(var item in
collection.TakeWhile(x => yourBool))
{...}
答案 3 :(得分:11)
我发现了另一种方法:
foreach (var car in cars) if (!rentedCars.Contains(car))
{
// Magic
}
答案 4 :(得分:5)
我是否正确理解你
我不明白使用foreach
循环的阻力;我会坚持你拥有的或
foreach(var job in jobs.TakeWhile(x => someCondition(x)) {
someAction(job);
}
答案 5 :(得分:1)
不,foreach只适用于每个元素。
您可以在常规for(a; b; c)
循环中组合多个条件。与for(a; b && x; c)