在方法返回的If-Else语句中,是否可以明确声明是否可以隐式遵循?

我有一个方法来检查某些东西,并根据这些检查返回一个布尔值。 它涉及单个分支If部分按顺序检查约5个条件。 如果这些条件中的任何一个返回true,则该方法将return true; 。 如果没有条件返回true,则该方法将return false; 。 由于If部分之后的代码只会在没有条件为真的情况下运行,因此该代码在逻辑上与包含实际的Else语句相同。

那么在这种情况下实际写入Else声明是否更好?

编辑

事实certificate,我需要有关哪些条件实际上为其中某些条件触发了“true”的信息,因此我更改了方法以返回int,其中-1表示“false”情况。 逻辑仍然存在,如果没有条件成立,它将返回-1。 所以,我不再有return (cond1 || cond2 || cond3 || cond4 || cond5);选项return (cond1 || cond2 || cond3 || cond4 || cond5); ,但我也感谢大家的建议,因为我确实没有想过它(主要是因为cond3是一个非常复杂的条件,涉及在两对DateTime对象的中点检查交集,所以它看起来很难看)。 虽然方法的性质发生了变化,但这个问题的性质还没有,所有答案仍然基本适用……

代码是目前,用它来解释它并删除所有通过cond5定义cond1的无关代码……

 if (cond1) { return 1; } else if (cond2) { return 2; } else if (cond3) { return 3; } else if (cond4) { return 4; } else if (cond5) { return 5; } 

我倾向于喜欢这样的东西来回归硬性价值观。

 static bool SomeFunc(string arg) { bool result = false; if (arg.Length < 10) { result = true; } else if (arg.StartsWith("foo")) { result = true; } if (!result && arg.EndsWith("foo")) { result = true; } return result; } 

这真的是一种风格问题,你(和你合作的人)发现更清楚。 一般来说,我个人觉得结构如下:

 if( a ) someResult = doSomething(); else if( b ) someResult = doSomethingElse(); else someResult = doSomethingAnyways(); return someResult; 

比:更清楚:

 if( a ) return doSomething(); if( b ) return doSomethingElse(); return doSomethingAnyways(); 

无论表达你的意图最好和/或最具可读性。

以下所有选项都完全有效:

 if (condition1) return true; if (condition2) return true; if (condition3) return true; return false; 

要么

 if (condition1) return true; else if (condition2) return true; else if (condition3) return true; else return false; 

要么

 return condition1 || condition2 || condition3; 

如果条件非常重要或者if分支中有多个语句,我倾向于使用前两个选项。 如果条件不复杂,最后一个选项可以提供更简洁的代码。

就个人而言,我通常更喜欢使用ELSE,因为我认为它使意图更清晰。 如果你写

 if (sensorScan()==ENEMY) return FIRE_PHASERS; else return SEND_GREETING; 

读者很清楚,你正在处理一个条件中的两个分支。 当然,在这样一个简单的案例中,每个分支只是一条线,无论如何这可能是显而易见的。 但是在现实生活中,你经常在IF和许多条件下有许多代码行,所以对于读者而言,每个块以返回结束并且最后一个块因此仅在所有先前的块中执行时可能不会立即显而易见。条件是假的。

我对这种做法的一个例外是代码是深度嵌套的。 当它开始在页面上爬行太远时,我经常发现删除ELSE更具可读性。

另一个问题是当一个条件是奇数情况而另一个条件是主线时。 是的,这是完全主观的,但在这种情况下,我倾向于尽可能将主线放在ELSE之外。

听起来你问这是否:

 if ((condition1) || (condition2) || (condition3) || (condition4) || (condition5) ) { return true; } else { return false; } 

可以变成这个:

 if ((condition1) || (condition2) || (condition3) || (condition4) || (condition5) ) { return true; } return false; 

是。

考虑一下:

 return (condition1) || (condition2) || (condition3) || (condition4) || (condition5); 

在没有真正看到你的代码的情况下很难说,但鉴于你已经有很多条件可以产生一个true ,那么让代码失败并最终return false;可能会更清楚return false; 在末尾:

 public bool MyComplicatedTest() { if (complicated_condition1) { return true; } if (complicated_condition2) { return true; } .... return false; } 

这纯粹是风格和品味的问题。

我个人的偏好是仅在存在任何一种情况时才包括其他内容。

 if (SomeCondition()) return "Boxers"; else return "Briefs"; 

如果方法中有多个返回,那么我将省略最后的else。

 if (!OvenOn()) return false; if (timeRemaining <= 0d) return false; if (DoorOpen()) return false; return true; 

在我看来,这个方案似乎最清晰。