我需要检查一系列项是否有任何一项满足某个条件,但同时又不是所有项都满足相同的条件。
例如,对于一个包含10个项的序列,如果该序列至少有一个满足条件但不全部满足,则结果为TRUE:
- 有10个满足条件的项,0个不满足,结果为FALSE
- 有0个满足条件的项,10个不满足,结果为FALSE
- 有1个满足条件的项,9个不满足,结果为TRUE
- 有9个满足条件的项,1个不满足,结果为TRUE
我知道可以这样做:
mySequence.Any (item => item.SomeStatus == SomeConst) && !mySequence.All (item => item.SomeStatus == SomeConst)
但这并不是最优解。
有更好的方法吗?
.Aggregate
和一个自定义类型,该类型包含所需信息的属性 - 只是一个输入... - user57508.Count(item => item.SomeStatus == SomeConst)
可能更便宜。如果该值大于0且小于集合大小,则返回true。如果序列是IEnumerable<T>
,则由于短路,您的实现可能更优。 - Dmitry S.