#if Pas de débogage en c #?

127

J'ai la ligne en code vb:

#if Not Debug

que je dois convertir, et je ne le vois pas en c #?

Y a-t-il quelque chose d'équivalent ou existe-t-il une solution de contournement?

user278618
la source

Réponses:

239

Vous auriez besoin d'utiliser:

#if !DEBUG
    // Your code here
#endif

Ou, si votre symbole est en fait Debug

#if !Debug
    // Your code here
#endif

À partir de la documentation , vous pouvez effectivement traiter DEBUGcomme un booléen. Vous pouvez donc faire des tests complexes comme:

#if !DEBUG || (DEBUG && SOMETHING)
CodeNaked
la source
15

Juste pour que vous soyez familier avec ce qui se passe ici, il #ifs'agit d'une expression de prétraitement et d' DEBUGun symbole de compilation conditionnelle. Voici un article MSDN pour une explication plus approfondie.

Par défaut, lors de la configuration de débogage , Visual Studio vérifiera l' option de constante Define DEBUG sous les propriétés de génération du projet. Cela vaut pour C # et VB.NET. Si vous voulez devenir fou, vous pouvez définir de nouvelles configurations de construction et définir vos propres symboles de compilation conditionnelle. L'exemple typique lorsque vous voyez cela est:

#if DEBUG
    //Write to the console
#else
    //write to a file
#endif
Aaron Daniels
la source
10

Juste au cas où cela aiderait quelqu'un d'autre, voici ma réponse.

Cela ne fonctionnerait pas correctement:

#if !DEBUG
     // My stuff here
#endif

Mais cela a fonctionné:

#if (DEBUG == false)
     // My stuff here
#endif
Vaccano
la source
3
Cela aurait pu avoir raison au jour de la publication, mais au moins pour VS 2015! DEBUG fonctionne comme prévu
Ole Albers
5

Je pense que quelque chose comme ça fonctionnera

 #if (DEBUG)
//Something
#else
//Something
#endif
KhanZeeshan
la source
5
Le simple fait de noter que les parenthèses ne sont pas nécessaires pour ces #ifinstructions conditionnelles . Il peut être écrit#if DEBUG
atconway
0
     bool isDebugMode = false;
#if DEBUG
     isDebugMode = true;
#endif
    if (isDebugMode == false)
    {
       enter code here
    }
    else
    {
       enter code here
    }
Luiz Flavio Cavalcanti da Silv
la source
5
C'est une mauvaise réponse car elle utilise la logique d'exécution pour gérer ce qui pourrait être fait au moment de la compilation.
antiduh
Les modèles T4 au moment de la conception et autres auront besoin de ce genre de choses de temps en temps.
StingyJack