tag - #ifdef en C#
tag debug c# (4)
Me gustaría hacer lo siguiente, pero en C # en lugar 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
¡Te recomendaría usar el atributo condicional !
Actualización: 3.5 años después
Puede usar #if
como este ( ejemplo copiado 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
}
}
Solo es útil para excluir partes de métodos.
Si usa #if
para excluir algún método de la compilación, deberá excluir de la compilación todos los códigos que invoquen ese método (a veces puede cargar algunas clases en tiempo de ejecución y no puede encontrar al que llama con "Buscar todas las referencias") ) De lo contrario, habrá errores.
Si utiliza la compilación condicional, por otro lado, puede dejar todos los fragmentos de código que invoquen el método. Todos los parámetros aún serán validados por el compilador. El método simplemente no se llamará en tiempo de ejecución . Creo que es mucho mejor ocultar el método solo una vez y no tener que eliminar todo el código que lo llama también. No está permitido usar el atributo condicional en métodos que devuelven valor, solo en métodos vacíos. Pero no creo que esto sea una gran limitación, porque si usas #if
con un método que devuelve un valor, debes ocultar todas las partes del código que lo llamen también.
Aquí hay un ejemplo:
// calling Class1.ConditionalMethod() will be ignored at runtime // unless the DEBUG constant is defined using System.Diagnostics; class Class1 { [Conditional("DEBUG")] public static void ConditionalMethod() { Console.WriteLine("Executed Class1.ConditionalMethod"); } }
Resumen:
Yo usaría #ifdef
en C ++ pero con C # / VB usaría el atributo Condicional. De esta manera, ocultas la definición del método sin tener que ocultar los fragmentos de código que lo llaman. El compilador todavía compila y valida el código de llamada; sin embargo, el método no se llama en el tiempo de ejecución. Es posible que desee utilizar #if
para evitar dependencias porque con el atributo Conditional su código aún se compila.
C # tiene un preprocesador. Funciona de manera ligeramente diferente a la de C ++ y C.
Aquí hay enlaces de MSDN: la sección de todas las directivas de preprocesador .
#if
si seré tu nuevo amigo, creo.
Si desea definir sus propios símbolos de compilación personalizados, puede hacerlo en las propiedades del proyecto (en la pestaña Generar, "Símbolos de compilación condicional").
#if DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Asegúrate de tener la casilla de verificación para definir DEBUG marcado en tus propiedades de compilación.