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.