25

Resharper 告诉我这段代码中的“else”是多余的:

if(a)
{
   //Do Something
}
else if(b)
{
   //Do Something
}

else似乎并不多余,因为如果为else真,则b不会被评估ab如果是一个变量,额外的开销很小,但b也可以是一个表达式。

这个对吗?

4

3 回答 3

44

如果您在第一个块内有某种break, continue,returnthrow语句(甚至是gotoif总是导致执行分支到当前块之外,这是多余的:

if(a)
{
    return 0;
}
else if(b)
{
    return 1;
}

在这种情况下,如果代码进入第一个块,它就不可能进入第二个块,所以它相当于:

if(a)
{
    return 0;
}
if(b)
{
    return 1;
}
于 2013-11-14T23:21:34.673 回答
7

在这种情况下你是对的,但这就是我认为他们开始这样做的原因:

某些 if-else 条件可以删除其 else 子句。考虑以下方法:

public int Sign(double d)
{
    if (d > 0.0)
        return 1;
    else
        return -1;
}

在上面,可以安全地删除 else 语句,因为它的 if 子句从方法返回。因此,即使没有 else,您也无法通过 if 子句主体。

于 2013-11-14T23:21:43.453 回答
0

这对我来说似乎并不多余。如果两者都为真a,则删除 else 将导致不同的程序流程。b

于 2013-11-14T23:20:17.420 回答