繁体   English   中英

在C#中的#if内使用#define预处理程序指令是否有效

[英]Is it valid to use the #define preprocessor directive inside an #if in C#

我可以在C#的#if#endif内部使用#define 预处理程序指令吗?

例如

#if !SILVERLIGHT && !__ANDROID__ && !__IOS__ 
#define SupportsMutex
#endif

看起来可行,但我需要确定。 关于此的文章很多,但是大多数时候是在C而不是C#的上下文中-C#中的预处理器指令a受到更多限制。

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

此MSDN页面提供以下注释:

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

我需#if !SILVERLIGHT && !__ANDROID__ && !__IOS__是因为多次使用#if !SILVERLIGHT && !__ANDROID__ && !__IOS__很难管理。

当然,我们也可以将SupportsMutex添加到项目的“条件编译符号”中,但这更难管理且透明度较低。

是。 查看C#规范 ,在2.5.3声明指令中给出了这种用法的一个特定示例,该示例被视为有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM