在C#中的#if中使用#define预处理器指令是否有效?

时间:2016-10-04 21:42:21

标签: c# conditional-compilation preprocessor-directive

我可以在C#中使用#define #if#endif内的#if !SILVERLIGHT && !__ANDROID__ && !__IOS__ #define SupportsMutex #endif preprocessor directive吗?

e.g。

#if !SILVERLIGHT && !__ANDROID__ && !__IOS__

它看起来很有效,但我需要确定。有很多关于此的文章,但大部分时间都是在C语境中而不是C# - C#中的预处理程序指令a更加有限。

Visual Studio的突出显示似乎支持它,但根据语言/编译器规范它真的有效吗?

This MSDN page给出了以下注释:

  

#define指令不能用于声明常量值,这通常在C和C ++中完成。 C#中的常量最好定义为类或结构的静态成员。如果你有几个这样的常量,可以考虑创建一个单独的“常量”类来保存它们。

我需要这个,因为多次使用SupportsMutex很难管理。

当然,我们也可以将In [1]: a = '<' In [2]: a Out[2]: '\xef\xbb\xbf<' 添加到项目的“条件编译符号”中,但这更难以管理且更少透明。

1 个答案:

答案 0 :(得分:5)

是。查看C# specification这个用法的一个特定示例在 2.5.3声明指令部分中给出,并视为有效:

#define Enterprise
#if Professional || Enterprise  
   #define Advanced
#endif 
namespace Megacorp.Data 
{
    #if Advanced    
    class PivotTable {...}  
    #endif 
}