布尔逻辑问题:我可以将这4个if语句强制转换为单个布尔语句吗?

时间:2011-08-23 01:55:39

标签: c# boolean-logic

我有一个布尔逻辑问题。我有以下if语句应该能够合并为一个布尔表达式。请帮忙。我花了太多时间在这上面,我真的很惭愧地问我的同事。

if (denyAll == true & allowOne == false) return false;
if (denyAll == true & allowOne == true) return true;
if (denyAll == false & allowOne == false) return false;
if (denyAll == false & allowOne == true) return true;
return true; //should never get here

我确信有一个优雅的解决方案。

由于

7 个答案:

答案 0 :(得分:9)

return allowOne;可以解决这个问题吗?

答案 1 :(得分:5)

我认为这只是:

return allowOne;

denyAll值似乎并不重要:

denyAll   allowOne   result
false     false      false
false     true       true
true      false      false
true      true       true

答案 2 :(得分:2)

补充其他答案,一些基本提示:

您可以使用if (allowOne)代替if (allowOne == true)if (!allowOne)代替if (allowOne == false)

此外,对于条件操作,您通常应使用&&运算符而不是&,因为这样可以实现短路。例如,在表达式if (denyAll && !allowOne)中,如果denyAll为false,则不会因为表达式已经为假而无法评估!allowOne

此外,如果您的方法返回bool,那么您通常可以将表达式简化为return语句本身。例如:

if (!denyAll && allowOne)
   return true;
else
   return false;

简化为:

return (!denyAll && allowOne);

答案 3 :(得分:1)

return allowOne;怎么样?如果一切都只是一个变量而且阅读没有副作用,那么它应该有相同的结果。

答案 4 :(得分:1)

看起来真正重要的是你的“allowOne”bool(因为denyAlls的值似乎并不重要)。假设,你只需检查allowOne是否为真。

答案 5 :(得分:0)

据我所见:

If allowOne = true then return true;
return false;

会这样做“拒绝所有”设置似乎对结果没有任何影响,不应该在那里。

答案 6 :(得分:0)

您可以使用以下内容:

if (denyAll && !allowOne) 
    return false;
return denyAll || allowOne;

然而,你应该考虑更具可读性的东西。

更新: 正如其他一些人指出的那样(以及我没有看到的)是,你实际上忽略了denyAll all,所以return allowOne;就是你所需要的。