1) Пользовательские исключения могут помочь прояснить ваши намерения.
Как это может быть? Намерение состоит в том, чтобы обработать или зарегистрировать исключение, независимо от того, является ли тип встроенным или пользовательским.
Основная причина, по которой я использую пользовательские исключения, состоит в том, чтобы не использовать один тип исключения для покрытия одной и той же проблемы в разных контекстах (например, параметр имеет нулевое значение в системном коде, что может быть вызвано внешним фактором и пустой корзиной покупок). Однако разделение между кодом системы и бизнес-доменом и использованием разных типов исключений кажется очень очевидным и не использует большинство пользовательских исключений. В связи с этим, если пользовательские исключения охватывают бизнес-исключения, я также мог бы получить все места, которые являются источниками исключений на уровне бизнес-домена, с помощью «Найти все ссылки». Стоит ли добавлять исключения, если вы проверяете аргументы в методе на нулевое значение, используете их несколько раз, а затем добавляете улов? Реалистичен ли риск того, что внешний фактор или какая-либо другая причудливая причина может привести к тому, что аргумент будет нулевым после проверки в любом случае?
2) Что это означает, когда исключения не должны использоваться для управления потоком программ и почему нет? Я предполагаю, что это как:
if (exceptionVariable != null)
{
}
Как правило, рекомендуется заполнять каждую переменную в объекте исключения? Как разработчик, вы ожидаете, что каждая возможная переменная будет заполнена другим кодером?