Исключения более полезны, но ими может быть (имхо) очень тяжело управлять, и есть возможность использовать слишком много исключений. И они требуют дополнительной проверки, возможно, нежелательной для оптимизации кода. Лично я использую исключения только тогда, когда код требует глубокого управления catch (операторы catch очень низки в стеке вызовов) или когда параметры функции не жестко закодированы в коде.

ько начал читать «Отладку приложений MS .Net 2.0» Джона Роббинса и смутился из-за его евангелизации Debug.Assert (...).

Он указывает, что правильно реализованные подтверждения сохраняют состояние, в некоторой степени, состояния ошибки, например:

Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");

Теперь лично мне кажется безумным, что он так любит повторять свой тест без реального разумного комментария «бизнес-логики», возможно, «я <= 3 никогда не должен происходить из-за процесса виджетов flobittyjam».

Итак, я думаю, что получаю Asserts как своего рода низкоуровневую вещь «Давайте защитим мои предположения» ... предполагая, что кто-то чувствует, что это тест, который нужно выполнить только при отладке - то есть вы защищаете себя от коллег и будущие программисты, и надеются, что они действительно проверяют вещи.

Но что я не понимаю, так это то, что он продолжает говорить, что вы должны использовать утверждения в дополнение к обычной обработке ошибок; Теперь, что я предполагаю, что-то вроде этого:

Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
    throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}

Что я получил от повторения Debug.Assert теста состояния ошибки? Я думаю, я бы понял, если бы мы говорили о двойной проверке очень важного вычисления только для отладки ...

double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");

... но я не получаю его для тестов параметров, которые, безусловно, стоит проверить (как в сборках DEBUG, так и в Release) ... или нет. Чего мне не хватает?

Ответы на вопрос(8)

Ваш ответ на вопрос