Атрибут Conditional в C#
Атрибут ConditionalAttribute из System.Diagnostics привязывает метод к символу
условной компиляции. Если символ не объявлен, вызовы метода исчезают из IL - как
будто их обернули в #if.
Метод должен возвращать void; для выражений с результатом по-прежнему нужны
директивы препроцессора.
Объявим DEBUG и вызовем трассировочный метод перед обычным выводом. Сначала появится "trace", затем "ok". Без DEBUG в сборке останется только вторая строка: компилятор удалит вызов TraceLine:
#define DEBUG
using System.Diagnostics;
TraceLine();
Console.WriteLine("ok");
[Conditional("DEBUG")]
static void TraceLine() => Console.WriteLine("trace");
Сделайте отладочный вывод, который пропадает без символа DEBUG, и выведите "saved".