就像运营商"&"即使第一个是假的,也会执行第二个条件, 我为#34; All"寻找同样的事情。我想要" All"的结果但也希望评估每个元素。在我的例子中,我称之为愚蠢。
以下是我想要这个的原因示例。
main
{
Object[] array = InitSomeArray();
AreObjectValid = array.dumbAll(o => Validate(o));
//other stuff with AreObjectValid
}
private bool Validate(object o)
{
bool IsValid = IsPositiveNumeric(o.ToString());
HighLighInvalidObjectWhenInvalid(o, IsInvalid: !IsValid);
return IsValid;
}
linq中是否存在这样的事情?
注意:我已经知道如何在没有链接的情况下处理这个问题。
答案 0 :(得分:5)
您可以使用其他查询运算符来实现相同的功能。一个例子是计算满足条件的对象数量。
Object[] array = InitSomeArray();
var count = array.Count(o => Validate(o));
var areObjectsValid = count == array.Length;
答案 1 :(得分:4)
不是真的,但你可以实现这一目标。
var allValid = array.Aggregate(true, (acc, o) => acc & Validate(o));
答案 2 :(得分:2)
我喜欢这个,而不是Aggregate
答案(和Count
答案,只要你有一个数组),但在这里:
AreObjectValid = array.Select(o => Validate(o)).ToArray().All(b => b);
或,正如Asad指出的那样,
AreObjectValid = array.Select(Validate).ToArray().All(b => b);
答案 3 :(得分:2)
这里有一堆LINQ答案,但是因为我认为LINQ转换理想情况下应该是无副作用的,所以这里的方法使用foreach
并且不会真正牺牲太简洁了。
bool all = true;
foreach(var o in array)
all &= Validate(o);
这会为每个值评估Validate
,如果任何值未通过验证,那么all
将为false。