#if (C#-Referenz)

Aktualisiert: November 2007

Mit #if können bedingte Direktiven beginnen, die Symbole testen, um festzustellen, ob sie zu true ausgewertet werden. Wenn sie true ergeben, wertet der Compiler den gesamten Code zwischen der #if-Direktive und der nächsten #endif-Direktive aus. Beispiel:

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

Die Operatoren == (Gleichheit), != (Ungleichheit), && (und) und || (oder) können zur Auswertung mehrerer Symbole verwendet werden. 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 Bedingung eines oder mehrerer Symbole ein- oder ausschließen. Dies kann höchst nützlich sein, wenn Code für ein 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 VC_V7
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !VC_V7)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
        Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
        Console.WriteLine("DEBUG and VC_V7 are defined");
#else
        Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
    }
}

DEBUG and VC_V7 are defined

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

C#-Präprozessordirektiven

Weitere Ressourcen

C#-Referenz