title: C# Preprocessor
body: <p>While the C# spec does include a pre-processor and basic directives (#define, #if, etc), the language does not have the same flexible pre-processor found in languages such as C/C++. I believe the lack of such a flexible pre-processor was a design decision made by Anders Hejlsberg (although, unfortunately, I can't find reference to this now). From experience, this is certainly a good decision, as there were some really terrible un-maintainable macros created back when I was doing a lot of C/C++. </p>
  
  <p>That said, there are a number of scenarios where I could find a slightly more flexible pre-processor to be useful. Code such as the following could be improved by some simple pre-processor directives:</p>
  
  <pre><code>public string MyProperty
  {
    get { return _myProperty; }
    set
    {
      if (value != _myProperty)
      {
        _myProperty = value;
        NotifyPropertyChanged("MyProperty");
        // This line above could be improved by replacing the literal string with
        // a pre-processor directive like "#Property", which could be translated
        // to the string value "MyProperty" This new notify call would be as follows:
        // NotifyPropertyChanged(#Property);
      }
    }
  }
  </code></pre>
  
  <p>Would it be a good idea to write a pre-processor to handle extremely simple cases like this? Steve McConnell wrote in <a href="https://rads.stackoverflow.com/amzn/click/com/0735619670" rel="nofollow noreferrer" rel="nofollow noreferrer">Code Complete</a> (p208):</p>
  
  <blockquote>
    <p><em>Write your own preprocessor</em>    If a language doesn't include a preprocessor, it's fairly easy to write one...</p>
  </blockquote>
  
  <p>I am torn. It was a design decision to leave such a flexible pre-processor out of C#. However, an author I highly respect mentions it may be ok in some circumstances.</p>
  
  <p><strong>Should I build a C# pre-processor? Is there one available that does the simple things I want to do?</strong></p>