Сверху моей головы я могу думать о 4 способах проверки нулевых аргументов:
Debug.Assert(context != null);
Contract.Assert(context != null);
Contract.Requires(context != null);
if (context == null) throw new ArgumentNullException("context");
Я всегда использовал последний метод, но я только что увидел фрагмент кода, который использовал Contract.Requires
, с которым я не знаком. Каковы преимущества/недостатки каждого метода? Существуют ли другие способы?
В VS2010 w/Resharper,
-
Contract.Assert
предупреждает меня, что выражение всегда верно (как он знает, я не совсем уверен... не может HttpContext быть нулевым?), -
Contract.Requires
исчезает, и он сообщает мне, что компилятор не будет вызывать метод (я предполагаю, что из-за прежней причины он никогда не будет равен нулю) и - Если я изменил последний метод на
context != null
, весь код, следующий за ним, исчезнет, и он сообщает мне, что код эвристически недоступен.
Итак, кажется, что последние 3 метода имеют какой-то интеллект, встроенный в статическую проверку VS, а Debug.Assert
просто тупой.