Share via


#if (Riferimenti per C#)

Quando il compilatore C# trova una direttiva #if seguita da una direttiva #endif</legacyLink>, compila il codice tra le direttive solo se il simbolo specificato è definito. A differenza di C e C++, non è possibile assegnare un valore numerico a un simbolo. L'istruzione #if in C# è booleana e consente di verificare solo se il simbolo è stato o meno definito. Di seguito è riportato un esempio:

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

È possibile utilizzare gli operatori == (uguaglianza), != (disuguaglianza) solo per verificare se una condizione è true o false . True significa che il simbolo è definito. L'istruzione #if DEBUG ha lo stesso significato di #if (DEBUG == true). È possibile utilizzare gli operatori && (e), || (o), e ! (non) valutare se i simboli più definite. È anche possibile raggruppare simboli e operatori tra parentesi.

Note

#if, insieme alle direttive #else, #elif, #endif, #define e #undef, consente di includere o escludere il codice in base all'esistenza di uno o più simboli. Questo può essere utile quando si compila il codice per una build di debug o per una configurazione specifica.

Una direttiva condizionale che inizia con #if deve terminare in modo esplicito con una direttiva #endif.

#define consente di definire un simbolo. In questo modo, utilizzando il simbolo come espressione passata alla direttiva #if, l'espressione restituirà true.

Un simbolo può anche essere definito tramite l'opzione del compilatore /define. Per rimuovere la definizione di un simbolo, è possibile utilizzare #undef.

Un simbolo definito tramite /define o #define non provoca conflitti con una variabile avente lo stesso nome. Il nome di una variabile, infatti, non può essere passato a una direttiva per il preprocessore e un simbolo può essere valutato solo da una direttiva per il preprocessore.

L'ambito di un simbolo creato con #define è il file in cui è stato definito.

Esempio

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

Vedere anche

Riferimenti

Direttive per il preprocessore C#

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#