我想遍历一个对象列表并检查一个布尔值,直到所有都为真,然后返回。
这对Linq来说可能吗?
换句话说:
< obj {1,true},obj {1,false},obj {1,false},obj {1, 假} >
但是bool正在被其他东西更新,我想检查bool直到所有都是真的然后返回控制。
如何处理linq?
谢谢!
答案 0 :(得分:3)
您可以使用.Any()
返回一个布尔值,表示您的集合中的任何值都为false。
while( yourCollection.Any(q => q.BooleanVariable == false)) { }
这将一直运行,直到所有变量都设置为true
。
答案 1 :(得分:0)
由于您要在不断检查时更新集合,因此需要将检查逻辑和逻辑分开,将列表更新为不同的线程。
AutoResetEvent waitEvent = new AutoResetEvent(false);
ThreadPool.QueueUserWorkitem
(
work =>
{
while(true)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
if(!yourCollection.Any(x => x.BooleanVariable == false))
{
waitEvent.Set();
break;
}
}
}
);
//alternatively, you could already have another thread running that is updating the list
new Thread(
{
//do some stuff that updates the list here
}).Start();
waitEvent.WaitOne();
//continue doing stuff when all items in list are true