#ifdef en C #

Je voudrais faire le ci-dessous mais en C # au lieu de C ++

#ifdef _DEBUG bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging #else bool bypassCheck = false; //NEVER bypass it #endif 

 #if DEBUG bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging #else bool bypassCheck = false; //NEVER bypass it #endif 

Assurez-vous d’avoir la case à cocher pour définir DEBUG cochée dans vos propriétés de construction.

#if sera votre nouvel ami, je pense.

Si vous souhaitez définir vos propres symboles de compilation personnalisés, vous pouvez le faire dans les propriétés du projet (sous l’onglet Construire, “Symboles de compilation conditionnelle”).

Je vous recommande d’utiliser l’ atsortingbut conditionnel !

Mise à jour: 3,5 ans plus tard

Vous pouvez utiliser #if comme ceci ( exemple copié depuis MSDN ):

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

Uniquement utile pour exclure des parties de méthodes.

Si vous utilisez #if pour exclure une méthode de la compilation, vous devrez exclure de la compilation tous les morceaux de code qui appellent cette méthode (parfois, vous pouvez charger certaines classes à l’exécution et vous ne pouvez pas trouver l’appelant avec “Rechercher toutes les références”). ). Sinon, il y aura des erreurs.

Si vous utilisez une compilation conditionnelle, vous pouvez toujours laisser tous les morceaux de code qui appellent la méthode. Tous les parameters seront toujours validés par le compilateur. La méthode ne sera tout simplement pas appelée à l’exécution . Je pense qu’il est préférable de cacher la méthode une seule fois et de ne pas avoir à supprimer tout le code qui l’appelle également. Vous n’êtes pas autorisé à utiliser l’atsortingbut conditionnel sur les méthodes qui renvoient de la valeur – uniquement sur les méthodes void. Mais je ne pense pas que ce soit une grosse limitation parce que si vous utilisez #if avec une méthode qui retourne une valeur, vous devez cacher tous les morceaux de code qui l’appellent aussi.

Voici un exemple:


     // l'appel de Class1.ConditionalMethod () sera ignoré à l'exécution 
     // sauf si la constante DEBUG est définie


     en utilisant System.Diagnostics;
     classe classe1 
     {
        [Conditionnel ("DEBUG")]
        public static void ConditionalMethod () {
           Console.WriteLine ("Exécuté Class1.ConditionalMethod");
        }
     }

Résumé:

J’utiliserais #ifdef en C ++ mais avec C # / VB j’utiliserais l’atsortingbut Conditionnel. De cette façon, vous masquez la définition de la méthode sans avoir à cacher les morceaux de code qui l’appellent. Le code appelant est toujours compilé et validé par le compilateur, mais la méthode n’est pas appelée à l’exécution. Vous souhaiterez peut-être utiliser #if pour éviter les dépendances car, avec l’atsortingbut Conditionnel, votre code est toujours compilé.

C # a un préprocesseur. Cela fonctionne un peu différemment de celui de C ++ et de C.

Voici un lien MSDN – la section sur toutes les directives de préprocesseur .