#if (C#-Referenz)#if (C# Reference)

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.When the C# compiler encounters an #if directive, followed eventually by an #endif directive, it will compile the code between the directives only if the specified symbol is defined. 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.Unlike C and C++, you cannot assign a numeric value to a symbol; the #if statement in C# is Boolean and only tests whether the symbol has been defined or not. Beispiel:For example,

#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.You can use the operators == (equality), != (inequality) only to test for true or false . „True“ bedeutet, dass das Symbol definiert wurde.True means the symbol is defined. Die #if DEBUG-Anweisung hat die gleiche Bedeutung wie #if (DEBUG == true).The statement #if DEBUG has the same meaning as #if (DEBUG == true). Sie können mithilfe der Operatoren && (und), || (oder) und !You can use the operators && (and), || (or), and ! (nicht ) auswerten, ob mehrere Symbole definiert wurden.(not) to evaluate whether multiple symbols have been defined. Symbole und Operatoren können auch mit Klammern gruppiert werden.You can also group symbols and operators with parentheses.

HinweiseRemarks

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.#if, along with the #else, #elif, #endif, #define, and #undef directives, lets you include or exclude code based on the existence of one or more symbols. Dies kann hilfreich sein, wenn Code für einen Debugbuild oder für eine bestimmte Konfiguration kompiliert wird.This can be useful when compiling code for a debug build or when compiling for a specific configuration.

Eine bedingte Direktive, die mit einer #if-Direktive beginnt, muss explizit mit einer #endif-Direktive beendet werden.A conditional directive beginning with a #if directive must explicitly be terminated with a #endif directive.

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.#define lets you define a symbol, such that, by using the symbol as the expression passed to the #if directive, the expression will evaluate to true.

Ein Symbol kann auch mit der /define-Compileroption definiert werden.You can also define a symbol with the /define compiler option. Die Definition eines Symbols kann mit #undef aufgehoben werden.You can undefine a symbol with #undef.

Zwischen einem Symbol, das mit /define oder mit #define definiert wird, und einer Variablen mit dem gleichen Namen kommt es zu keinem Konflikt.A symbol that you define with /define or with #define does not conflict with a variable of the same name. Das bedeutet, dass ein Variablenname nicht an eine Präprozessordirektive übergeben werden sollte und ein Symbol nur von einer Präprozessordirektive ausgewertet werden kann.That is, a variable name should not be passed to a preprocessor directive and a symbol can only be evaluated by a preprocessor directive.

Der Gültigkeitsbereich eines mit #define erstellten Symbols ist die Datei, in der es definiert wurde.The scope of a symbol created with #define is the file in which it was defined.

BeispielExample

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

DEBUG und MYTEST werden definiert.DEBUG and MYTEST are defined

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-PräprozessoranweisungenC# Preprocessor Directives