Conditional Methods

I saw an internal post today about somebody who wanted to get rid of their #if DEBUG statements in their code, because they were ugly. That made me realize that there's a feature that not everybody knows about, known as conditional methods.

Consider the following code:

using System;
using System.Diagnostics;

class Program {
    static void Main(string[] args) {
        #if DEBUG
        DebugMethod1();
        #endif

        DebugMethod2();
        Console.ReadKey();
    }
    static void DebugMethod1() {
        Console.WriteLine("Debug1");
    }

    [Conditional("DEBUG")]
    static void DebugMethod2() {
        Console.WriteLine("Debug2");
    }
}

In my call to DebugMethod1(), I've used the traditional #if approach to only compile the call if the DEBUG symbol is defined. But in the call to DebugMethod2(), I've used a conditional method that has the same effect - if the DEBUG symbol is not defined, it's as if the call isn't there. That includes any side effects from parameter evaluation - they don't happen.

Note that the docs on the ConditionalAttribute class are a bit misleading.