# V3211. Unity Engine. The operators '?.', '??' and '??=' do not correctly handle destroyed objects derived from 'UnityEngine.Object'.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что объект производный от `UnityEngine.Object` был использован с оператором условного null (`?.`) или null-объединения (`??` и `??=` ).

Согласно документации Unity, не рекомендуется использовать операторы `?.`, `??` и `??=`. Поскольку их нельзя перегрузить, они не учитывают возможность уничтожения объектов, производных от `UnityEngine.Object`. Вследствие чего, проверка может иметь некорректный результат.

Рассмотрим пример:

    class CustomComponent: MonoBehaviour
    {
      public bool HitConfirm(....)
      {
        Projectile bullet;
        ....
        if(....)
          Destroy(bullet);
        ....
        if(bullet?.isJammed())
        {....}
      }
    }

В данном случае при обращении к `bullet` проверка с помощью оператора условного null (`?.` ) не будет учитывать возможность, что объект может быть уничтожен, так как этот оператор нельзя перегрузить.

Чтобы это исправить, рекомендуется использовать проверку с помощью оператора `==` или `!=`.

Исправленный вариант:

    class CustomComponent: MonoBehaviour
    {
      public bool HitConfirm(....)
      {
        Projectile bullet;
        ....
        if(....)
          Destroy(bullet);
        ....
        if(bullet != null ? bullet.isJammed() : null)
        {....}
      }
    }