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

Gra*_*ote 6 c# if-statement

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

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

编辑

事实证明,我需要有关哪些条件实际上为某些条件触发了"true"的信息,所以我更改了方法以返回int,-1表示"false"情况.逻辑仍然存在,如果没有条件成立,它将返回-1.所以,我不再有可缩减的选项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; }
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 11

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

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

return someResult;
Run Code Online (Sandbox Code Playgroud)

比:更清楚:

if( a )
    return doSomething();
if( b )
    return doSomethingElse();
return doSomethingAnyways();
Run Code Online (Sandbox Code Playgroud)

  • 我同意这是一个风格问题,我个人更喜欢与你喜欢的相反!上面的后一个选项更干净,代码更少,我更喜欢它. (7认同)
  • 在没有使代码逻辑复杂化的情况下,我倾向于选择方法中的单个退出点.我发现具有单个出口点的方法更容易理解,重构和维护.还有一个方便的地方放置一个断点,你仍然可以在允许执行流程恢复之前调整返回值. (2认同)

Fel*_*lan 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 当然,但那些不是我称之为现实条件的.我的意图是,我认为最好设置一个默认的返回结果和流程,而不是在任何地方使用返回语句.我不认为有多个返回语句是错误的,只是认为有大量的返回语句会伤害清晰度,这也使得调试变得更加困难. (3认同)
  • IMO这是将它缩短为"返回(arg.Length <10)||"的完美候选者 arg.StartsWith("foo")|| arg.EndsWith( "富")` (2认同)