Дизайн по контракту / C # 4.0 / исключение ArgumentNullException

StackOverflow https://stackoverflow.com/questions/434088

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

scroll top