Resharper избыточное "еще" действительно избыточно?

Resharper говорит мне, что "else" в этом коде избыточен:

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

else не выглядит излишним, потому что else не позволяет b оцениваться, если a - true. Дополнительные служебные данные небольшие, если b - переменная, но b также может быть выражением.

Правильно ли это?

Ответы

Ответ 1

Это избыточно, если у вас есть какой-то оператор break, continue, return или throw (или даже goto) внутри первого if -блока, который всегда вызывает выполнение ветвь вне текущего блока:

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

В этом случае, если код входит в первый блок, он не будет вводить второй блок, поэтому он эквивалентен:

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

Ответ 2

Вы правы в этом случае, но это причина, по которой я думаю, что он имел это для начала:

Определенные условия if-else могут удалить свое предложение else. Рассмотрим следующий метод:

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

В приведенном выше примере инструкция else может быть безопасно удалена, потому что ее предложение if возвращается из метода. Таким образом, даже без остального, вы не сможете пройти мимо тела if.

Ответ 3

Это не кажется лишним для меня. Удаление else приведет к разному потоку программы, если оба значения a и b верны.