#ifdef在C#中

我想要做的下面,但在C#而不是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 

确保您有checkbox来定义您的构build属性中选中的DEBUG。

#if我想你会成为你的新朋友。

如果要定义自己的自定义编译符号,可以在项目属性中(在“生成”选项卡上;“条件编译符号”)进行。

我会build议你使用条件属性 !

更新:3.5年后

你可以像这样使用#if ( 从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 } } 

仅用于排除部分方法。

如果使用#if从编译中排除一些方法,那么您将不得不从编译中排除调用该方法的所有代码片段(有时您可能会在运行时加载一些类,并且找不到调用方的“查找所有引用” )。 否则会有错误。

另一方面,如果使用条件编译,则仍然可以保留调用该方法的所有代码片段。 所有参数仍将由编译器validation。 该方法不会在运行时调用 。 我认为只隐藏一次方法会更好,而且不必删除所有调用它的代码。 您不能在返回值的方法上使用条件属性 – 只能在void方法上使用。 但我不认为这是一个很大的限制,因为如果你使用#if方法返回一个值,你必须隐藏所有调用它的代码段。

这里是一个例子:


     //调用Class1.ConditionalMethod()将在运行时被忽略 
     //除非定义了DEBUG常量


    使用System.Diagnostics;
     class Class1 
     {
        [条件( “debugging”)]
        public static void ConditionalMethod(){
           Console.WriteLine(“Executed Class1.ConditionalMethod”);
        }
     }

概要:

我会使用#ifdef在C + +但与C#/ VB我会使用条件属性。 这样你隐藏了方法定义,而不必隐藏调用它的代码段。 调用代码仍由编译器编译和validation,但该方法在运行时不会被调用。 您可能想要使用#if来避免依赖关系,因为有条件属性的代码仍然被编译。

C#有一个预处理器。 它的工作原理与C ++和C稍有不同

这是一个MSDN链接 – 关于所有预处理器指令的部分。