Defines.Debug vs #if DEBUG

Я начал использовать класс define следующим образом:

internal sealed class Defines
{
    /// <summary>
    /// This constant is set to true iff the define DEBUG is set.
    /// </summary>
    public const bool Debug =
  #if DEBUG
   true;
  #else
   false;
  #endif
}

Преимущества, которые я вижу:

  • Обеспечивает, чтобы я не разбивал материал, который С#if.. # else.. # endif не будет проверяться компилятором.
  • Я могу найти ссылки, чтобы увидеть, где они используются.
  • Часто бывает полезно иметь bool для отладки, определяет, что код длиннее/более грязно.

Возможный недостаток:

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

У меня отсутствуют другие недостатки?

[Редактировать] Типичные примеры использования:

private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
                                                          : Permissions.NewAllFalse();

Или:

var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);

Ответ 1

Я вижу по крайней мере один большой недостаток: если Debug false, этот код вызовет предупреждение:

if (Debug)
    Console.WriteLine("Debug");

Потому что компилятор обнаружит, что условие никогда не выполняется, поэтому вызов Console.WriteLine недоступен.