💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# #if(C# 参考) 如果 C# 编译器遇到最后面跟有 [#endif](https://msdn.microsoft.com/zh-CN/library/hyx43has.aspx) 指令的 **#if** 指令,则仅当指定的符号已定义时,它才会编译这两个指令之间的代码。与 C 和 C++ 不同,您不能对符号赋予数值;C# 中的 #if 语句是 Boolean,仅测试符号是否已定义。例如, ``` #define DEBUG // ... #if DEBUG Console.WriteLine("Debug version"); #endif ``` 使用运算符 [==](https://msdn.microsoft.com/zh-CN/library/53k8ybth.aspx)(相等)和 [!=](https://msdn.microsoft.com/zh-CN/library/3tz250sf.aspx)(不相等)只能测试出结果为 [true](https://msdn.microsoft.com/zh-CN/library/eahhcxk2.aspx) 还是 [false](https://msdn.microsoft.com/zh-CN/library/67bxt5ee.aspx)。True 表示符号已定义。语句 #if DEBUG 与 #if (DEBUG == true) 的含义相同。可以使用运算符[&&](https://msdn.microsoft.com/zh-CN/library/2a723cdk.aspx) (and)、[||](https://msdn.microsoft.com/zh-CN/library/6373h346.aspx) (or) 和 [!](https://msdn.microsoft.com/zh-CN/library/f2kd6eb2.aspx)(无) 计算多个符号是否定义了。还可以用括号将符号和运算符分组。 ## 备注 结合使用 **#if** 与 [#else](https://msdn.microsoft.com/zh-CN/library/87a56b46.aspx)、[#elif](https://msdn.microsoft.com/zh-CN/library/88td0y52.aspx)、[#endif](https://msdn.microsoft.com/zh-CN/library/hyx43has.aspx)、[#define](https://msdn.microsoft.com/zh-CN/library/yt3yck0x.aspx) 和 [#undef](https://msdn.microsoft.com/zh-CN/library/wkxst87d.aspx) 指令,可以根据一个或多个符号是否存在来包含或排除代码。在编译调试版本的代码或针对特定配置进行编译时,这会很有用。 以 **#if** 指令开始的条件指令必须用 **#endif** 指令显式终止。 **#define** 使您可以定义一个符号,通过将该符号用作传递给 #if 指令的表达式,使该表达式计算为 **true**。 也可以用 [/define](https://msdn.microsoft.com/zh-CN/library/0feaad6z.aspx) 编译器选项来定义符号。可以用 [#undef](https://msdn.microsoft.com/zh-CN/library/wkxst87d.aspx) 来取消定义符号。 用 **/define** 或 **#define** 定义的符号与具有同一名称的变量不冲突。即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。 用 **#define** 创建的符号的范围是在其中定义该符号的文件。 ``` // preprocessor_if.cs #define DEBUG #define MYTEST using System; public class MyClass { static void Main() { #if (DEBUG && !MYTEST) Console.WriteLine("DEBUG is defined"); #elif (!DEBUG && MYTEST) Console.WriteLine("MYTEST is defined"); #elif (DEBUG && MYTEST) Console.WriteLine("DEBUG and MYTEST are defined"); #else Console.WriteLine("DEBUG and MYTEST are not defined"); #endif } } ``` ``` 定义 DEBUG 和 MYTEST ``` ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [C# 预处理器指令](https://msdn.microsoft.com/zh-CN/library/ed8yd1ha.aspx)