Дизайн по контракту / C # 4.0 / исключение ArgumentNullException - PullRequest
5 голосов
/ 12 января 2009

Мне ужасно надоело проверять все мои аргументы на ноль и выбрасывать ArgumenutNullExceptions, когда они есть.

Насколько я понимаю, C # 4.0 допускает некоторый дизайн по контрактным конструкциям. Можно ли будет указать, что метод не будет принимать нулевые аргументы в C # 4.0?

Кроме того, могу ли я что-нибудь сделать за это время (может быть, атрибут?), Чтобы избежать этой монотонной задачи проверки на ноль и бросания?

Ответы [ 5 ]

4 голосов
/ 21 января 2009

Рик Брюстер описывает хорошее решение для краткой декларативной проверки параметров стиля в этом посте,

http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/

Предотвращает использование отражения (недостаток DbC) и не создает накладных расходов для неисключительного пути кода.

Например, как он использует методы расширения, чтобы разрешить вызовы методов экземпляра для нулевых объектов. Очень умный бит кодирования IMO.

Если вы проданы на DbC, Google Spec # и PostSharp.

3 голосов
/ 12 января 2009

Вы можете создать NotNull<T> универсальный класс, который помогает, но есть некоторые побочные эффекты. См. сообщение в блоге Роберта Нистрома .

2 голосов
/ 12 января 2009

Не уверен насчет собственных конструкций DbC в C # 4.0, но Microsoft собирается выпустить кросс-языковую библиотеку Contracts .
Вы можете скачать версию для MSVS2008 здесь .

1 голос
/ 12 января 2009

В качестве альтернативы уже приведенным ответам стоит заглянуть в Null Object design pattern.

Суть этого шаблона проектирования заключается в том, что после создания «нулевого объекта» больше нет необходимости выполнять какие-либо проверки на нулевое значение, а методы нулевого объекта реализуют желаемое поведение всякий раз, когда нулевое (в противном случае) будет иметь передана ссылка на "реальный объект".

Этот шаблон проектирования не зависит от C # 4.0 и фактически может быть легко реализован практически на любом языке программирования OO .

0 голосов
/ 11 июля 2010

Я только начал использовать Code Contracts, новую функцию в C # 4.0, вам нужно скачать надстройку от MS, чтобы вы могли видеть ее в настройках вашего проекта. Подробности здесь -> http://research.microsoft.com/en-us/projects/contracts/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...