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

Допустим у меня есть список
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
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Есть практика ловить исключения на самом высоком уровне, и уже там выводить сообщение, ниже код только кидает исключения. Это поможет вам не разрушить приложение и что то внятное сообщить пользователю.
Но лучше их избегать исключения довольно дорогая операция
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы