1

我正在尝试使用预编译器指令来切换我的应用程序中的某些功能。我使用的是预编译器指令而不是const static变量,因为这些功能不会出现在应用程序的发布版本中。

C# 是否确实不允许所有 C 预编译器命令,即#if X > Y& 等?我下面的代码抛出编译器错误。是否可以使用预编译器指令来切换我的应用程序中的功能?

我的解决方案是实现此功能的一种非常“C++/C”的方式。实现此功能的 C# 方法是什么?

#define DEBUG                   1 // Not allowed to assign values to constants?
#define USE_ALTERNATE_METHOD    0

public class MyApplication
{
    public MyApplication()
    {
        #if DBEUG > 0 // Not allowed these kinds of directives?
            RegressionTests.Run();
        #endif // DEBUG > 0
    }

    public void myMethod
    {
        #if USE_ALTERNATE_METHOD > 0
            // Do alternate stuff
        #else 
            // Do regular stuff
        #endif // USE_ALTERNATE_METHOD > 0
    }
}
4

1 回答 1

2

指定只是#if DEBUG工作。

您不能使用诸如#define DEBUG 1.

但是,您可以只指定#define DEBUG#define CustomDefinition将其与Conditional属性一起使用。

例如,

你可以这样做:

#if DEBUG
Console.WriteLine("This will work in DEBUG mode alone");
#endif

或者您可以conditional-attributes在您只想在调试模式下执行的方法之上指定。

例如,

[Conditional("DEBUG")]
void ExecuteOnlyInDebugMode()
{
     // do stuff you wanna do.
}

对于您的示例,它必须是这样的:

#define DEBUG                  
#define USE_ALTERNATE_METHOD       
public class MyApplication
{
    public MyApplication()
    {
        #if DEBUG
            RegressionTests.Run();
        #endif 
    }

    public void myMethod
    {
        #if USE_ALTERNATE_METHOD 
            // Do alternate stuff
            //do not execute the following. just return.
        #endif
            // Do regular stuff

    }
}

你可以在这里找到更多信息。解释得很漂亮。

另外,请在此处阅读更多该Conditional属性

于 2013-10-28T05:37:47.483 回答