Freigeben über


#if (C#-Referenz)

Wenn der C#-Compiler eine #if-Direktive vorfindet, auf die möglicherweise eine #endif-Direktive folgt, wird der Code zwischen den Direktiven nur dann kompiliert, wenn das angegebene Symbol definiert wurde. Im Gegensatz zu C und C++ können Sie einem Symbol keinen numerischen Wert zuweisen. Die #if-Anweisung in C# ist ein boolescher Ausdruck und überprüft nur, ob das Symbol definiert wurde. Beispiel:

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

Sie können die Operatoren == (Gleichheit), != (Ungleichheit) nur zur Überprüfung auf true oder false verwenden. True bedeutet, dass das Symbol definiert wurde. Die #if DEBUG-Anweisung hat die gleiche Bedeutung wie #if (DEBUG == true). Sie können die Operatoren && (und), || (oder) und ! verwenden (nicht) auswerten, ob mehrere Symbole definiert wurden. Symbole und Operatoren können auch mit Klammern gruppiert werden.

Hinweise

Wenn Sie #if mit den Direktiven #else, #elif, #endif, #define und #undef verwenden, können Sie Code je nach dem Vorhandensein eines oder mehrerer Symbole ein- oder ausschließen. Dies kann hilfreich sein, wenn Code für einen Debugbuild oder für eine bestimmte Konfiguration kompiliert wird.

Eine bedingte Direktive, die mit einer #if-Direktive beginnt, muss explizit mit einer #endif-Direktive beendet werden.

Mit #define kann ein Symbol definiert werden. Wenn dieses Symbol dann als Ausdruck an die #if-Direktive übergeben wird, wird der Ausdruck als true ausgewertet.

Ein Symbol kann auch mit der /define-Compileroption definiert werden. Die Definition eines Symbols kann mit #undef aufgehoben werden.

Zwischen einem Symbol, das mit /define oder mit #define definiert wird, und einer Variablen mit dem gleichen Namen kommt es zu keinem Konflikt. Das bedeutet, dass ein Variablenname nicht an eine Präprozessordirektive übergeben werden sollte und ein Symbol nur von einer Präprozessordirektive ausgewertet werden kann.

Bei dem Gültigkeitsbereich eines mit #define erstellten Symbols handelt es sich um die Datei, in der es definiert wurde.

Beispiel

// 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
    }
}
  

Siehe auch

Referenz

C#-Präprozessordirektiven

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz