使用#if UNITY_EDITOR提前返回替代#if !UNITY_EDITOR包裹代码是否是好方案?
你可能遗漏的问题
- 第一种写法的
#pragma warning disable CS0162如果作用范围管控不当,会屏蔽掉其他真正存在问题的不可达代码警告,提升后期维护的bug风险 - 一旦后续需要在函数末尾追加全平台通用逻辑,第一种写法需要大改结构,容易遗漏修改
#pragma指令或者提前return的逻辑 - 多平台分支扩展能力差,如果后续要新增其他平台的专属逻辑,第一种写法的提前return结构会让嵌套逻辑变得非常混乱
实现#if !UNITY_EDITOR代码正常智能感知的方案
你遇到的非激活条件块无法检索引用、没有高亮的问题,本质是Visual Studio默认只对当前活动编译上下文的代码开启完整语义分析,修改设置即可解决:
- 打开Visual Studio顶部菜单栏的「工具」→「选项」
- 依次展开左侧菜单「文本编辑器」→「C#」→「高级」
- 在「主动式编译上下文」相关设置项中,勾选**「即使代码未包含在活动编译上下文中,也启用对其的完整语义分析」**(部分版本翻译为「为非活动代码块启用完整语义分析」)
- 保存设置后重启Visual Studio即可生效
修改完成后,#if !UNITY_EDITOR包裹的代码会保留浅灰色的非激活标识,但可以正常使用代码高亮、智能提示、引用检索、重命名等所有智能感知功能,完全可以替代第一种写法的优势,同时代码整洁度和可维护性更好。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

