我已经尝试搜索这个,但找不到任何东西,也不知道这会被称为什么。布尔合并?
我有几个并行调用的方法,每个方法都返回一个布尔值,指示失败。有没有一种方法可以将其中每一个分配给一个布尔值,这样如果其中任何一个返回 true 则整个布尔值 是真的。
即:
Boolean exceptionOccurred = false;
Parallel.Invoke(
() => exceptionOccurred = MethodA(),
() => exceptionOccurred = MethodB(),
() => exceptionOccurred = MethodC(),
() => exceptionOccurred = MethodD(),
);
按原样使用该代码,如果方法 A 返回 true,而其余方法返回 false,具体取决于哪个方法首先返回/最后返回,则它几乎总是设置为 false。但我想知道其中是否有任何一个返回 true。
一种解决方案是将每个布尔值分配给一个唯一的布尔值,然后检查所有布尔值。但我希望有像按位 bool += 运算符这样的东西,如果它已经是 true 的话,它不会将 exceptionOccurred 设置为 false。有办法做到这一点吗?
我意识到我可能可以扩展布尔值来自己实现这一点,我只是想知道是否已经有办法做到这一点?
我还意识到更好的解决方案是为每个方法抛出异常并将其冒泡,但我需要以不同的方式处理这个问题是有原因的,主要是我希望继续执行但最终在最后记录总体失败。
这称为短路。
bool someTrueVar = true;
someTrueVal |= someExpensiveCalculationWhichIsNotNeededWhenAlreadyTrue();
// which is shorthand for
someTrueVal = someTrueVal || someExpensiveCalculationWhichIsNotNeededWhenAlreadyTrue();