Вот моя проблема. Я очень большой поклонник Design by contract, я использую эту концепцию, особенно при разработке библиотек, которые могут быть использованы другими разработчиками. Я только что нашел новый способ сделать это: Contract.Requires
вместо Exception
:
Поэтому вместо того, чтобы:
public void SomeMethod(string name){
if(name==null) throw new NullArgumentException("Null values not supported");
}
Теперь у меня есть:
public void SomeMethod(string name){
Contract.Requires(name != null);
}
EDIT: я работаю под VS2010 в режиме отладки.
Проблема: Contract.Requires
ничего не делает, даже если name
есть null
!
Документация MSDN гласит:
Задает договор предварительного условия для прилагаемого метода или свойство.
Но ничего не указано в случае, если условие не выполнено!
Я также заметил, что есть другие Contract.Requires
перегрузки, которые генерируют исключение, отображают сообщение... но тогда что такое Contract.Requires(Boolean)
для?
РЕДАКТИРОВАТЬ В ответе ниже указано, что плагин должен быть установлен, чтобы иметь полную мощность Contract
API, но как насчет пользователей Mono, которые хотят, чтобы их код вел себя одинаково на разных платформах?