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
верны.