在 C# 的 #if 中使用 #define 预处理器指令是不是有效
Posted
技术标签:
【中文标题】在 C# 的 #if 中使用 #define 预处理器指令是不是有效【英文标题】:Is it valid to use the #define preprocessor directive inside an #if in C#在 C# 的 #if 中使用 #define 预处理器指令是否有效 【发布时间】:2016-10-04 21:42:20 【问题描述】:我可以在 C# 中的 #if
和 #endif
中使用 #define
preprocessor directive 吗?
例如
#if !SILVERLIGHT && !__android__ && !__ios__
#define SupportsMutex
#endif
看起来它有效,但我需要确定。有很多关于这方面的文章,但大多数时候是在 C 而不是 C# 的上下文中 - C# 中的预处理器指令 a 更加有限。
Visual Studio 的突出显示似乎支持它,但根据语言/编译器规范,这真的有效吗?
This MSDN page 给出以下注释:
#define 指令不能像在 C 和 C++ 中那样用于声明常量值。 C# 中的常量最好定义为类或结构的静态成员。如果您有多个此类常量,请考虑创建一个单独的“常量”类来保存它们。
我需要这个,因为多次使用#if !SILVERLIGHT && !__ANDROID__ && !__IOS__
很难管理。
当然我们也可以将SupportsMutex
添加到项目的“条件编译符号”中,但这更难管理,也更不透明。
【问题讨论】:
【参考方案1】:是的。查看C# specification,此用法的特定示例在2.5.3 声明指令部分中给出并被视为有效:
#define Enterprise
#if Professional || Enterprise
#define Advanced
#endif
namespace Megacorp.Data
#if Advanced
class PivotTable ...
#endif
【讨论】:
谢谢!很快就找到了!以上是关于在 C# 的 #if 中使用 #define 预处理器指令是不是有效的主要内容,如果未能解决你的问题,请参考以下文章