我有一个看起来像这样的数组:
bool[] array = new bool[4] { true, false, true, true } ;
Run Code Online (Sandbox Code Playgroud)
我想在这个数组的所有元素之间进行AND/OR比较,例如:
AND示例:true AND false AND true AND true
所以我可以得到上面例子中的最终结果,或者:
或者示例:true或false OR true或true
这将在上面的例子中给我真实.
它有一个允许我这样做的数组中的内置方法吗?或者我是否应该在所有元素之间进行迭代并逐一进行比较?
Jon*_*eet 18
根据评论和其他答案,您可以使用LINQ来实现这两个目标.(虽然你没有; farbiondriven的答案绝对可以,但LINQ解决方案可以处理任何问题 ,但它的通用性较差IEnumerable<bool>.)
Any使用标识投影将检测是否有任何元素true,这与OR对所有元素执行逻辑的结果相同.
All使用标识投影将检测是否所有元素都是true,这与AND在所有元素上执行逻辑的结果相同:
bool orResult = array.Any(x => x);
bool andResult = array.All(x => x);
Run Code Online (Sandbox Code Playgroud)
这两个都会短路:如果第一个元素是true,那么Any就不会费心去看后面的元素了,结果肯定是true.同样,如果第一个元素是false,那么All不会费心去看后面的元素,因为结果肯定会false.
但是,您可能需要考虑您希望结果为空数组的内容.Any()将返回false一个空序列,而All在空序列上返回true.这可能是也可能不是您期望或需要的.
这可以通过linq完成:
var all = array.All(x => x);
var or = array.Any(x => x);
Run Code Online (Sandbox Code Playgroud)