Je voudrais faire ce qui suit 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
Je voudrais faire ce qui suit 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
Réponses:
Je vous recommande d'utiliser l' attribut conditionnel !
Mise à jour: 3,5 ans plus tard
Vous pouvez utiliser #ifcomme ceci ( exemple copié à partir de 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
}
}
Utile uniquement pour exclure des parties de méthodes.
Si vous utilisez #ifpour exclure une méthode de la compilation, vous devrez exclure de la compilation tous les morceaux de code qui appellent également cette méthode (parfois vous pouvez charger certaines classes au moment de 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 la compilation conditionnelle, vous pouvez toujours laisser tous les morceaux de code qui appellent la méthode. Tous les paramètres seront toujours validés par le compilateur. La méthode ne sera tout simplement pas appelée au moment de l'exécution . Je pense qu'il est préférable de masquer 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'attribut conditionnel sur les méthodes qui renvoient une valeur - uniquement sur les méthodes void. Mais je ne pense pas que ce soit une grande limitation car si vous utilisez #ifune méthode qui renvoie une valeur, vous devez masquer 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 ("Executed Class1.ConditionalMethod");
}
}
Résumé:
J'utiliserais #ifdefen C ++ mais avec C # / VB j'utiliserais un attribut conditionnel. De cette façon, vous masquez la définition de la méthode sans avoir à masquer les morceaux de code qui l'appellent. Le code appelant est toujours compilé et validé par le compilateur, la méthode n'est cependant pas appelée au moment de l'exécution. Vous pouvez utiliser #ifpour éviter les dépendances, car avec l'attribut conditionnel, votre code est toujours compilé.
C # a un préprocesseur. Cela fonctionne légèrement différemment de celui de C ++ et C.
Voici un lien MSDN - la section sur toutes les directives de préprocesseur .