Внезапно я могу придумать 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
просто тупой.