#if (Справочник по C#)
При обнаружении компилятором C# директивы #if, за которой далее следует директива #endif, компиляция кода между двумя директивами выполняется только в том случае, если определен указанный символ. В отличие от C и C++, символу нельзя присвоить числовое значение; оператор #if языка C# принадлежит типу Boolean, и он только проверяет, определен ли символ. Например:
#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif
Операторы == (равенство), != (неравенство) можно использовать только для проверки возвращаемых ими значений true или false. Значение True означает, что символ определен. Оператор #if DEBUG имеет то же значение, что и оператор #if (DEBUG == true). Для оценки наличия определений нескольких символов можно использовать операторы && (и) и || (или). Можно группировать символы и операторы при помощи скобок.
Заметки
Оператор #if, вместе с операторами #else, #elif, #endif, #define и #undef, позволяет включать или исключать код на основе существования одного или нескольких символов. Это особенно полезно при компиляции кода для построения отладки или при компиляции для определенной конфигурации.
Условная директива, начинающаяся с директивы #if, должна быть явным образом оканчиваться директивой #endif.
Директива #define позволяет определить символ, который, при его использовании в качестве выражения, переданного директиве #if, приведет к получению значения true.
Также можно определить символ с помощью параметра компилятора /define. Для отмены определения символа служит директива #undef.
Символ, определенный с помощью /define или #define, не конфликтует с одноименной переменной. Имя переменной не должно передаваться директиве предварительной обработки, а символ может вычисляться только директивой предварительной обработки.
Область символа создается с помощью директивы #define в файле, в котором символ был определен.
Пример
// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !MYTEST)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
Console.WriteLine("DEBUG and MYTEST are defined");
#else
Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
}
}
См. также
Ссылки
Основные понятия
Руководство по программированию на C#