﻿# V3212\. Unity Engine\. Pattern matching does not correctly handle destroyed objects derived from 'UnityEngine\.Object'\.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что производный от UnityEngine\.Object объект был использован с pattern matching'ом для проверки на null\.

Согласно [документации Unity](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Object.html#:~:text=null-conditional%20operator%20(%3F.)%20and%20the%20null-coalescing%20operator%20(%3F%3F)%20are), не рекомендуется использовать pattern matching с объектами, производными от `UnityEngine.Object`\. 

Дело в том, что проверка на `null` с помощью pattern matching не учитывает возможность уничтожения объектов, производных от `UnityEngine.Object`\. Вследствие чего проверка может иметь некорректный результат\.

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

```cpp
class CustomComponent: MonoBehaviour
{
  public bool HitConfirm(....)
  {  
    Projectile bullet;
    ....
    if(....)
      Destroy(bullet);

    if (bullet is not null) 
    {....}
  }
}
```

В данном случае, при проверке `bullet` с помощью pattern matching'a, не будет учитываться возможность, что объект может быть уничтожен\.

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

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

```cpp
class CustomComponent: MonoBehaviour
{
  public bool HitConfirm(....)
  {  
    Projectile bullet;
    ....
    if(....)
      Destroy(bullet);

    if (bullet != null) 
    {....}
  }
}
```