Я использую контракты кода и для случайного использования они решают 2 проблемы кода для меня, у которых раньше не было хороших решений:
- проверка возвращаемых значений проверка
- Инварианты, по-видимому, являются плохо названными комбинированными параметрами проверки / точки входа и значения возврата / точки выхода.
Я мог бы объявить временную переменную для возвращаемого значения и утверждать некоторые вещи, прежде чем вернуть его, но это дополнительное трение.
проверка параметров уже имела решение: бросить ArgumentException.
Кодовые контракты добавляют к ArgumentException одну крошечную вещь - она заставляет вас проверять аргументы очень рано, что, на мой взгляд, является хорошей вещью.
С Code Contracts происходит гораздо больше, но я только что окунулся в это, и у меня нет редакции, которая выполняет супер-всеобъемлющие статические проверки. Я планирую перейти к использованию кодовых контрактов более полно, и как только я это сделаю, будет более элегантно проверять параметры, используя ту же платформу, вместо того, чтобы переключаться между кодовыми контрактами и обратно, если / then / throw ArgumentException