Я прочитав безліч статей (і ще пару подібних запитань, які були опубліковані на StackOverflow) про те, як і коли використовувати твердження, і я їх добре розумів. Але все-таки я не розумію, яка мотивація повинна спонукати мене використовувати Debug.Assert
замість простого виключення. Я маю на увазі те, що у .NET за замовчуванням відповідь на невдале твердження - "зупинити світ" та показати вікно повідомлення користувачеві. Хоча такий спосіб поведінки можна модифікувати, я вважаю це дуже прикрим і зайвим робити це, хоча я міг би натомість просто підкинути відповідний виняток. Таким чином, я міг легко записати помилку в журнал програми безпосередньо перед тим, як видалити виняток, і, крім того, моя програма не обов'язково зависає.
То чому я, якщо взагалі, маю використовувати Debug.Assert
замість простого винятку? Розміщення твердження там, де воно не повинно бути, може просто спричинити всі види "небажаної поведінки", тому, на мій погляд, я справді нічого не отримую, використовуючи твердження, замість того, щоб кидати виняток. Ви згодні зі мною, чи мені тут чогось не вистачає?
Примітка: Я повністю розумію, в чому полягає різниця "в теорії" (налагодження проти випуску, моделі використання тощо), але, як я бачу, мені було б краще кинути виняток замість виконання твердження. Оскільки, якщо у виробничому випуску виявлено помилку, я все одно хотів би, щоб "твердження" провалилося (врешті-решт, "накладні витрати" смішно малі), тому мені краще замість цього викинути виняток.
Редагувати: Я бачу це, якщо затвердження не вдалося, це означає, що програма перейшла в якийсь пошкоджений, несподіваний стан. То чому я хотів би продовжувати виконання? Не має значення, працює програма на налагоджувальній чи випускній версії. Те саме стосується обох