• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
jk-2048
博客园    首页    新随笔    联系   管理    订阅  订阅
C#预处理指令 #XXX
详见: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
条件编译语句中可使用如下逻辑运算符
可以使用运算符 ==(相等)和 !=(不相等)来测试 bool 值是 || (or) 和 !(not) 运算符来计算是否已定义多个符号。 还可以用括号对符号和运算符进行分组。
 
#if 以及 #else、#elif、#endif、#define 和 #undef 指令,可以基于是否存在一个或多个符号来选择性编译代码。 条件编译在编译调试版本的代码或编译特定配置的代码时会很有用。
 

3.定义区域#region

(用于折叠代码大纲)
可以使用以下两个预处理器指令来定义可在大纲中折叠的代码区域:
  • #region:启动区域。
  • #endregion:结束区域。
利用
posted on 2024-02-23 23:42  JK降谷羽  阅读(84)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3