Почему результат выполнения программы на C# именно такой?

Есть следующая программа на C#:

#if DEBUG
Console.WriteLine("Debug");
#else
Console.WriteLine("Release");
#endif

Правильный ответ что выведется в результате - Debug если режим debug и Release если это релиз. Но почему так? Почему не ошибка компляции?

Программа будет выполнена без ошибок, поскольку C# поддерживает так называемые препроцессорные директивы, которые пришли к нему из его предков - C и C .

Препроцессорные директивы обозначаются знаком "решётки", и их на самом деле (активно используемых) не так и много.


MSDN: "Директивы препроцессора, такие как #define и #ifdef, обычно используются для того, чтобы облегчить изменение исходного кода программ и их компиляцию в разных средах выполнения. Директивы в файле исходного кода позволяют препроцессору выполнять определенные действия. Например, препроцессор может заменять токены в тексте, вставлять содержимое других файлов в файл исходного кода или отключать компиляцию части файла путем удаления разделов текста. Строки препроцессора распознаются и выполняются до расширения макросов. Поэтому если макрос разворачивается в нечто, похожее на команду препроцессора, эта команда не распознается препроцессором."


На ITVDN также есть несколько видеокурсов, посвящённых директивам препроцессора, но я бы рекоммендовал Вам просмотреть видеокурсы C# Essential, а именно - урок про пространства имён и директивы и C для начинающих, где тоже есть урок, который так и называется - директивы препроцессора.