Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
При обработке исключения, производного от System.ApplicationException, можно смело предполагать, что исключение было инициировано кодом работающего приложения, а не сторонней библиотекой.
Чтобы код класса пользовательского исключения соответствовал рекомендациям .NET, нужно придерживаться следующих правил
В этом случае можно использовать тип функции int и возвращать 0 или 1 если выполнение корректно или с ошибкой.
ArgumentOutOfRangeException.От чего лучше наследоваться, от System.Exception или от System.ApplicationException?
По поводу упоминающегося в комментариях ArgumentException. Это исключение (и все производные от него) соверешенно особенное, оно означает нарушение контракта. Оно никогда не должно возникать при выполнении программ. Его возникновение должно быть 100% предсказуемо до вызова метода, на основании значений параметров и свойств объекта согласно контракту метода. Это исключение означает неправильно написанную программу.
Его возникновение должно быть 100% предсказуемо до вызова метода, на основании значений параметров и свойств объекта согласно контракту метода.
ArgumentOutOfRangeException при попытке достать несуществующий (находящийся за пределами строки) символ. Почему тогда некорректно кидать его же при попытке достать несуществующего пользователя? ArgumentException и его производные используются только для формально определимых контрактов?корректно ли кидать ArgumentOutOfRangeException при попытке достать несуществующий (находящийся за пределами строки) символ. Почему тогда некорректно кидать его же при попытке достать несуществующего пользователя?
А как же многопоточные системы, в которых состояние словаря может измениться между проверкой и получением значения?
Но важно то, что без дополнительных действий (например, блокировки) состояние словаря может измениться между проверкой и получением значения, как следствие, не вполне очевидно, это ошибка времени разработки или времени выполнения.
CanGetUser(id) и GetUser(id). Чем эта ситуация отличается от ситуации со словарем (учитывая, что репозиторий точно так же можно положить под ту или иную синхронизацию)?
Как правильно создавать пользовательские исключения в C#