Resharper冗余'其他'真的多余?

时间:2013-11-14 23:17:56

标签: c# optimization resharper

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

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

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

这是对的吗?

3 个答案:

答案 0 :(得分:34)

如果您在第一个内部有某种breakcontinuereturnthrow语句(甚至是goto),那就太多了if - 总是导致执行在当前块之外分支的块:

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

在这种情况下,如果代码进入第一个块,则无法进入第二个块,因此它等同于:

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

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:0)

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