Что лучше: обработать исключение или не вызывать его?

Допустим у меня есть список
var list = new List<int> { 1, 2, 3, 4 };
и как будет правильнее сделать?
Так:
int getValue(int index) {
    try {
        return list[index];
    }
    catch (ArgumentOutOfRangeException ex) {
        return -1;
    }
}

или так:
int getValue(int index) {
    if (index < list.Count) {
        return list[index];
    }
    else {
        return -1;
    }
}

или разницы нет?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 3
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
практикуйте замеры времени исполнения.. и вопросы отпадут

ps для async схем все может сильно меняться
Ответ написан
Комментировать
freeExec
@freeExec
Участник OpenStreetMap
Тут нет лучше, вопрос что вам нужно. Исключение вам всё равно придётся где-то обработать, и вы сами решаете на каком уровней логики не критично не получить результат.
Тот же List не может подсунуть вам фейк в виде -1, потому что он не знает, что это какое-то не валидное значение в вашем случае.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Есть практика ловить исключения на самом высоком уровне, и уже там выводить сообщение, ниже код только кидает исключения. Это поможет вам не разрушить приложение и что то внятное сообщить пользователю.
Но лучше их избегать исключения довольно дорогая операция
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы