Плюсы и минусы различных методов проверки предварительных условий?

Внезапно я могу придумать 4 способа проверки нулевых аргументов:

Debug.Assert(context != null);
Contract.Assert(context != null);
Contract.Requires(context != null);
if (context == null) throw new ArgumentNullException("context");

Я всегда использовал последний метод, но только что видел код фрагмент, который использовал Contract.Requires , с которым я не знаком. Каковы преимущества / недостатки каждого метода? Есть ли другие способы?


В VS2010 с Resharper

  • Contract.Assert предупреждает меня, что выражение всегда истинно (откуда он знает, я не совсем уверен ... не может быть HttpContext null?),
  • Contract.Requires исчезает, и он сообщает мне, что компилятор не будет вызывать метод (я предполагаю, что по первой причине он никогда не будет нулевым), и
  • , если я измените последний метод на контекст! = null весь последующий код исчезает, и это говорит мне, что код эвристически недоступен.

Итак, похоже, что последние 3 метода имеют какой-то интеллект, встроенный в статическую проверку VS, а Debug.Assert просто тупой.

17
задан Dariusz Woźniak 25 November 2013 в 23:37
поделиться