如果我有一个foreach
循环,有没有什么办法检查一个布尔值?'foreach'循环是否可以进行条件检查?
我不想在foreach()
之内检查一次,然后中断例如。我想要foreach
超过一个集合,并在同一时间评估是否有事。
例如,我不想做的事:
IEnumerable<Job> jobs = currentJobs;
foreach(Job job in jobs)
{
if (found)
break;
}
如果我有一个foreach
循环,有没有什么办法检查一个布尔值?'foreach'循环是否可以进行条件检查?
我不想在foreach()
之内检查一次,然后中断例如。我想要foreach
超过一个集合,并在同一时间评估是否有事。
例如,我不想做的事:
IEnumerable<Job> jobs = currentJobs;
foreach(Job job in jobs)
{
if (found)
break;
}
你总是可以把它变成一个for循环。
for (i = 0; i < jobs.Count && booleanTrue; i++) {
// do a lot of great stuff
}
您还需要改变工作从IEnumerable
到IList
。我认为IList
会更好地为您的目的服务。 IEnumerable
在您需要它们之前,懒惰会评估这些元素,并且不包含关联的集合帮助器方法。
不,一个foreach只适用于每个元素。
您可以在常规的for(a; b; c)
循环中合并多个条件。像for(a; b && x; c)
不是很喜欢它,但也许一些LINQ?
bool yourBool = false;
foreach(var item in
collection.TakeWhile(x => yourBool))
{...}
?
尝试使用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
*/
我是否理解正确,你
我不明白使用foreach
循环的阻力;我想要么你有什么坚持或
foreach(var job in jobs.TakeWhile(x => someCondition(x)) {
someAction(job);
}
我找到了另一种方法:
foreach (var car in cars) if (!rentedCars.Contains(car))
{
// Magic
}
你能提供一个例子吗?我对你的意思有点模糊......这意味着其他人也可能感到困惑。 – 2010-12-02 14:26:21
你能提供更多的细节和/或例子吗? – LukeH 2010-12-02 14:26:34
你的意思是像foreach(var item in MyList.Where(condition)) – Kikaimaru 2010-12-02 14:27:52