Resharper告诉我这段代码中的'else'是多余的:
if(a)
{
//Do Something
}
else if(b)
{
//Do Something
}
else
似乎并不多余,因为如果else
为真,则b
不会评估a
。如果b
是变量,则额外开销很小,但b
也可以是表达式。
这是对的吗?
答案 0 :(得分:34)
如果您在第一个内部有某种break
,continue
,return
或throw
语句(甚至是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)
这对我来说似乎并不多余。如果a
和b
都为真,则删除else将导致不同的程序流。