详见:https://learn.microsoft.com/zh-CN/dotnet/csharp/language-reference/preprocessor-directives
预处理指令简介
C#中可使用这些指令来帮助条件编译。 不同于 C 和 C++ 指令,不能使用这些指令来创建宏。 预处理器指令必须是一行中唯一的说明。
分类详情
1.可为空上下文#nullable
#nullable
预处理器指令将设置可为空注释上下文和可为空警告上下文 。 此指令控制是否可为空注释是否有效,以及是否给出为 Null 性警告。 每个上下文要么处于已禁用状态,要么处于已启用状态 。具体使用场景待续
2.条件编译#if
C#使用四个预处理器指令来控制条件编译:
#if
:打开条件编译,其中仅在定义了指定的符号时才会编译代码。#elif
:关闭前面的条件编译,并基于是否定义了指定的符号打开一个新的条件编译。#else
:关闭前面的条件编译,如果没有定义前面指定的符号,打开一个新的条件编译。#endif
:关闭前面的条件编译。
仅在定义了指定的符号时(或使用
!
、not 未定义指定的符号时),C# 编译器才会编译 #if
指令和 #endif
指令之间的代码。 与 C 和 C++ 不同,不能将数字值分配给符号。 C# 中的 #if
语句是布尔值,且仅测试是否已定义该符号。条件编译使用场景
使用条件编译语句可以在UNITY打包编译导出、在编辑器中运行前编译时,根据要编译的平台(如PC、安卓、IOS)来决定要编译哪段代码
UNITY提供了一些自带的符号定义,生成(build)系统会感知表示 SDK 样式项目中不同目标框架的预定义预处理器符号。 在创建可以面向多个 .NET 版本(多个目标平台)的应用程序时,这些符号会很有用。
例如,只有在定义了符号
DEBUG
时将编译以下代码:#if DEBUG
Console.WriteLine("Debug version");
#endif
未定义
MYTEST
时,将编译以下代码:#if !MYTEST
Console.WriteLine("MYTEST is not defined");
#endif
条件编译语句中可使用如下逻辑运算符
#if
以及 #else
、#elif
、#endif
、#define
和 #undef
指令,可以基于是否存在一个或多个符号来选择性编译代码。 条件编译在编译调试版本的代码或编译特定配置的代码时会很有用。3.定义区域#region
(用于折叠代码大纲)
可以使用以下两个预处理器指令来定义可在大纲中折叠的代码区域:
#region
:启动区域。#endregion
:结束区域。
利用