是否有一种简写方法可以表示布尔值是否已经为真,不要赋值为假?

问题描述 投票:0回答:1

我已经尝试搜索这个,但找不到任何东西,也不知道这会被称为什么。布尔合并?

我有几个并行调用的方法,每个方法都返回一个布尔值,指示失败。有没有一种方法可以将其中每一个分配给一个布尔值,这样如果其中任何一个返回 true 则整个布尔值 是真的。

即:

    Boolean exceptionOccurred = false;

    Parallel.Invoke(
       () => exceptionOccurred = MethodA(),
       () => exceptionOccurred = MethodB(),
       () => exceptionOccurred = MethodC(),
       () => exceptionOccurred = MethodD(),
    );

按原样使用该代码,如果方法 A 返回 true,而其余方法返回 false,具体取决于哪个方法首先返回/最后返回,则它几乎总是设置为 false。但我想知道其中是否有任何一个返回 true。

一种解决方案是将每个布尔值分配给一个唯一的布尔值,然后检查所有布尔值。但我希望有像按位 bool += 运算符这样的东西,如果它已经是 true 的话,它不会将 exceptionOccurred 设置为 false。有办法做到这一点吗?

我意识到我可能可以扩展布尔值来自己实现这一点,我只是想知道是否已经有办法做到这一点?

我还意识到更好的解决方案是为每个方法抛出异常并将其冒泡,但我需要以不同的方式处理这个问题是有原因的,主要是我希望继续执行但最终在最后记录总体失败。

c# boolean
1个回答
2
投票

这称为短路

bool someTrueVar = true;

someTrueVal |= someExpensiveCalculationWhichIsNotNeededWhenAlreadyTrue();

// which is shorthand for
someTrueVal = someTrueVal || someExpensiveCalculationWhichIsNotNeededWhenAlreadyTrue();
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.