【问题标题】:#include in C# (conditional compilation)#include in C#(条件编译)
【发布时间】:2010-04-23 00:02:34
【问题描述】:

是否可以在 C# 中设置这样一个条件,如果条件为真 - 编译一个文件;如果条件为假 - 编译另一个文件?

有点像

#ifdef DEBUG
#include Class1.cs
#else
#include Class2.cs
#endif

或者可能在项目属性中设置它。

【问题讨论】:

    标签: c# c-preprocessor


    【解决方案1】:

    不,不是。

    但是,您可以将两个整个文件都包装在 #if 块中。

    您可能还想查看[Conditional] attribute

    【讨论】:

    • 另外不要忘记分部类和分部方法在这种情况下非常有用。
    【解决方案2】:

    我不会推荐它。我不喜欢 Debug 和 Release 的代码如此不同的想法,以至于您需要拥有两个完全独立的文件才能理解这些差异。 #if DEBUG 在所有是一个相当大的代码味道 IMO...

    但是,您可以这样做:

    // Class1.cs
    #if DEBUG
    
    ...
    
    #endif
    

    .

    // Class2.cs
    #if !DEBUG
    
    ...
    
    #endif
    

    【讨论】:

      【解决方案3】:

      在 C# 中,我们不使用文件的包含,但您可以使用条件方法。

      例如,如果我正在开发一个游戏并且我正在为我的输入类使用共享代码库,但如果我在 Xbox 上,我希望调用一个方法,并使用不同的方法获取如果我在Zune 上调用。它仍然会返回相同类别的输入数据,但会采用非常不同的路径来获取它。

      您可以在此处了解有关条件方法的更多信息: http://msdn.microsoft.com/en-us/library/aa288458(v=VS.71).aspx

      【讨论】:

      • 链接断了一半("Visual Studio 2003 Retired Technical documentation")。
      【解决方案4】:

      谢天谢地,不是在这样的预处理器中。但是,您可以在文件本身中排除整个文件的实现。或者,您可以使用 MSBuild 或 NAnt 设置构建过程来切换我们的文件。

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 2012-11-17
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多