Предупреждение компилятора (уровень 2) CS0162
Обнаружен недоступный код
Компилятор обнаружил код, который никогда не будет выполнен.
Что просто говорит, Компилятор достаточно понимает через Статический анализ , что он не может быть достигнут, и полностью исключает его из скомпилированного IL (отсюда и ваше предупреждение )
Примечание : Вы можете доказать это самому себе, попытавшись перейти к недоступному коду с помощью отладчика или используя IL Explorer
finally
может работать на Exception , (хотя это в стороне), оно не меняет того факта (в данном случае), что все равно будет Uncaught Exception . Ergo, последний return
никогда не получит удар в любом случае.
Если вы хотите, чтобы код продолжался до последнего return
, ваш единственный вариант - Catch Exception ;
Если нет, просто оставьте все как есть и удалите return
.
Пример * ** 1053 тысяча пятьдесят две *
try
{
command.CommandText = sb.ToString();
returnValue = command.ExecuteNonQuery();
return returnValue == 1;
}
catch(<some exception>)
{
// do something
}
finally
{
command.Dispose();
}
return false;
Цитировать документацию
try-finally (C # Reference)
Используя блок finally, вы можете очистить любые ресурсы, которые
размещены в блоке try, и вы можете запустить код, даже если исключение
происходит в блоке try. Как правило, операторы блока finally
запускается, когда управление покидает оператор try. Передача контроля может
происходят в результате нормального выполнения, выполнения перерыва,
оператор continue, goto, return или распространения исключения
из оператора try.
В обработанном исключении связанный блок finally гарантирован
быть запущенным. Однако, если исключение не обработано, выполнение
Блок finally зависит от того, как выполняется операция по отмене исключения.
срабатывает. Это, в свою очередь, зависит от того, как настроен ваш компьютер.
Обычно, когда необработанное исключение завершает приложение, или
не окончательный блок выполняется не важно. Однако, если у вас есть
операторы в блоке finally, который должен выполняться даже в такой ситуации,
Одним из решений является добавление блока catch в оператор try-finally .
В качестве альтернативы, вы можете поймать исключение, которое может быть брошено в
блок try оператора try-finally выше стека вызовов . Тот
есть, вы можете перехватить исключение в методе, который вызывает метод
который содержит оператор try-finally или метод, который вызывает
этот метод, или в любом методе в стеке вызовов. Если исключение
не пойман, выполнение блока finally зависит от того,
Операционная система выбирает запуск операции отмены исключения.
Наконец
При использовании всего, что поддерживает интерфейс IDisposable
(предназначенный для освобождения неуправляемых ресурсов), вы можете заключить его в оператор using
. Компилятор сгенерирует try {} finally {}
и вызовет Dispose()
для объекта