如果 (!this) { return; } 在 C# 中有意义

本文关键字:有意义 return this 如果 | 更新日期: 2023-09-27 18:37:24

我在 Unity 中编码,我发现有时即使游戏对象已被销毁,Invoke 函数也可以调用方法。这就是我添加此检查的原因,它似乎可以正常工作,但这很奇怪。

假设我有一个对象,我想在一秒钟内自我销毁。我在觉醒时添加一个调用来自我摧毁它。但是,如果游戏结束,我想立即销毁游戏对象。该对象订阅了游戏结束事件。

    void Awake ()
    {
    Invoke ("_destroy", 1);
    GameMachine.Gameover += _destroy;
    }

_destroy方法是这样的:

    void _destroy()
    {
    if (!this) {
            return;
    }
    GameMachine.Gameover -= _destroy;
    Destroy (this.gameObject);
}

我添加了如果 (!this) 检查,因为我发现调用可以到达 _destroy 方法,即使对象已经被游戏结束事件破坏。这有什么意义,有可能吗?

谢谢

如果 (!this) { return; } 在 C# 中有意义

据我所知,它会起作用,但是,这样做不是一个好主意。Unity 的 MonoBehavior 覆盖了 bool 运算符。因此,当您检查时

!this

您正在检查对象(以及脚本)是否存在。

作为旁注,如果要取消订阅事件,请改用 OnDisable 函数。代码示例

void OnDisable () {
    GameMachine.Gameover -= _destroy;
}