Debug.Assert или условная компиляция - PullRequest
3 голосов
/ 23 ноября 2011

Рассмотрим код ниже:

#if DEBUG
    if (Systems.Contains(system))
        throw new InvalidOperationException("System already registered");
#endif

    Debug.Assert(!Systems.Contains(system), "System already registered");

Раньше я делал первое, с тех пор я обнаружил Debug.Assert.

Есть ли причина, по которой я не всегда должен отдавать предпочтениеDebug.Assert?

  1. Он существует только в отладочном коде (у него есть атрибут [Conditional("DEBUG")]).
  2. Мне кажется, он больше подходит для моего намерения (проверка работоспособности кодавместо того, чтобы вызывать исключения, которые будут обрабатываться позже).
  3. Это меньше кода для записи.

1 Ответ

4 голосов
/ 23 ноября 2011

Вы всегда можете использовать Debug.Assert (), потому что этот класс также соответствует условию DEBUG:

[Conditional("Debug")]

Указывает компиляторам, что вызов метода или атрибут должен быть игнорируется, если не указан указанный условный символ компиляции.

ConditionalAttribute применяется к методам, которые определены в Классы отладки и трассировки.
http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx

...