C#: Как Реализовать и использовать атрибут NotNull и CanBeNull

Вы используете values и должны использовать data для ссылки на один элемент в вашем внутреннем списке, поэтому вместо:

if values=='w':

у вас будет

if data=='w':
40
задан Dan Neely 18 July 2013 в 21:33
поделиться

2 ответа

В среднесрочной перспективе «кодовые контракты» (в 4.0) будут лучшим ответом на это. Они доступны в настоящее время (с академическими или коммерческими лицензиями), но будут более интегрированы в VS2010. Это может обеспечить как статический анализ, так и поддержку во время выполнения.

(edit) пример:

Contract.RequiresAlways( x != null );

Простой как так ... механизм контрактов кода работает на уровне IL, поэтому он может анализировать это и выдавать предупреждения / ошибки из вызывающего кода во время сборки, или во время выполнения. Для обратной совместимости, если у вас есть существующий код проверки, вы можете просто сообщить ему, где заканчивается проверка работоспособности, и он сделает все остальное:

if ( x == null ) throw new ArgumentNullException("x");
Contract.EndContractBlock();
46
ответ дан 27 November 2019 в 01:34
поделиться

Это можно сделать либо с помощью AOP , посредством чего Совет во время выполнения проверяет, является ли параметр метода нулевым и допустимы ли нулевые значения. См. PostSharp и Spring.NET для AOP.

Что касается ReSharper, см. Annotated Framework :

Мы проанализировали большую часть .NET Framework Class Library, а также NUnit Framework и аннотировали ее через внешние XML-файлы, используя набор пользовательских атрибутов из пространства имен JetBrains.Annotations, в частности:

  • StringFormatMethodAttribute (для методов, которые принимают строки формата в качестве параметров)
  • InvokerParameterNameAttribute (для методов со строковыми литеральными аргументами, которые должны соответствовать одному из параметров вызывающего абонента)
  • AssertionMethodAttribute (для методов утверждения)
  • AssertionConditionAtribute методов утверждения)
  • TerminatesProgramAttribute (для методов, которые завершают поток управления)
  • CanBeNullAttribute (для значений, которые могут быть нулевыми)
  • NotNullAttribute (для значений, которые не могут быть нулевыми)
19
ответ дан 27 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: