When to use preprocessor directives in .net?

llcf picture llcf · Nov 19, 2010 · Viewed 13k times · Source

I think this is a simple question so I assume I'm missing something obvious. I don't really ever use preprocessor directives but I was looking at someone's code which did and thought it was something I should be familiar with.

So I looked at the msdn example here it has the code:

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif

My two questions are:

  • in the example above why do they define DEBUG? I was under the impression that was set if you compile in debug v. release mode?
  • looking at the other example which has #define MYTEST and then writes to the console dependent on if it 'defined', but how does this differ from just using a variable? What am I missing here?

Answer

Shiv Kumar picture Shiv Kumar · Nov 19, 2010

I would actually recommend using the Conditional Attribute instead of inline #if statements.

[Conditional("DEBUG")]
private void DeleteTempProcessFiles()
{
}

Not only is this cleaner and easier to read since you don't end up having #if, #else within your code. This style is less prone to errors either during normal code edits and well as logic flow errors.