ReSharper 2026.1 Help

代码检查:高开销的空值比较

继承自 Unity.Object 的类将继承更改 ==!= 运算符行为的等值运算符。 虽然这些运算符执行标准 .NET 引用相等比较,但如果其中一边与 null 进行比较,这些运算符会调用本地代码来检查底层本地引擎对象是否依然存活。 有关详细背景信息,请参阅 底层 Unity 引擎对象生命周期检查可能被意外绕过代码检查的说明。

这种切换到本地代码的过程可能会很耗时,因为 Unity 会执行查找和验证,将脚本引用转换为本地引用。 虽然这种开销较小,但将 Unity 对象与 null 比较的成本远高于与普通 C# 类的比较,因此应避免在 性能关键上下文和循环中使用。

此检查会为在性能关键上下文中将 nullUnityEngine.Object 子类进行比较时添加性能指标高亮。 还会提供以下 Alt+Enter 上下文操作:

  • 移至循环外部。 这将引入一个变量来保存结果,并将比较移出循环范围。

  • 移至 Start 或 Awake。 这将引入一个字段来保存结果,并将比较移动到 StartAwake

2026年 5月 8日