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