Я прочитал множество статей (и пару других подобных вопросов, которые были опубликованы на StackOverflow) о том, как и когда использовать утверждения, и я хорошо их понял. Но все же я не понимаю, какая мотивация должна побуждать меня использовать Debug.Assert
вместо простого исключения. Я имею в виду, что в .NET ответ по умолчанию на неудачное утверждение - «остановить мир» и показать пользователю окно сообщения. Хотя такое поведение можно изменить, я считаю, что это очень раздражает и излишне, а вместо этого я мог бы просто выбросить подходящее исключение. Таким образом, я мог легко записать ошибку в журнал приложения непосредственно перед тем, как выбросить исключение, и, кроме того, мое приложение не обязательно зависает.
Итак, почему я должен использовать Debug.Assert
вместо простого исключения , если это вообще возможно? Размещение утверждения там, где его не должно быть, может вызвать все виды «нежелательного поведения», поэтому, с моей точки зрения, я действительно ничего не добьюсь, используя утверждение вместо того, чтобы генерировать исключение. Вы согласны со мной, или я что-то здесь упускаю?
Примечание. Я полностью понимаю, в чем разница «теоретически» (отладка и выпуск, шаблоны использования и т. Д.), Но, как я это вижу, мне было бы лучше выбросить исключение, чем выполнять утверждение. Поскольку, если в производственном выпуске обнаруживается ошибка, я все равно хотел бы, чтобы «утверждение» провалилось (в конце концов, «накладные расходы» смехотворно малы), поэтому мне лучше вместо этого выбросить исключение.
Изменить: как я это вижу, если утверждение не удалось, это означает, что приложение вошло в какое-то поврежденное, неожиданное состояние. Так зачем мне продолжать казнь? Не имеет значения, работает ли приложение на отладочной или выпускной версии. То же самое касается обоих