Почему событие NULL, если подписка была

Событие:

public class Inventory
{
    public List<Item> ItemList;
    public event EventHandler OnItemListChanged;

    public void CheckEvent()
    {
        if (OnItemListChanged == null)
        {
            Debug.Log("Event is null!");
        }
        else if (OnItemListChanged != null)
        {
            Debug.Log("Event is not null!");
        }
    }

    public void AddItem(Item item)
    {
        ItemList.Add(item);

        CheckEvent();

        OnItemListChanged?.Invoke(this, EventArgs.Empty);
    }

Подписка:

public class UI_Inventory : MonoBehaviour
{
    private Inventory _inventory;

    public void SetInventory(Inventory inventory) // вызывается при создании инвентаря
    {
        _inventory = inventory;

        _inventory.OnItemListChanged += Inventory_OnItemListChanged;

        _inventory.CheckEvent();

        RefreshInventoryItems();
    }

    private void Inventory_OnItemListChanged(object sender, EventArgs e)
    {
        RefreshInventoryItems();
    }

    public void RefreshInventoryItems()
    {
    }

Во время подписки событие не пустое, но во время вызова оно пустое.


Ответы (1 шт):

Автор решения: frozengrimm

Не знаю как работают классы Unity. Но как вариант создай конструктор класса Inventory и инициализируй в нем все нужные переменные:

public class Inventory
{
    public event EventHandler OnItemListChanged;
    public List<Item> ItemList;

    public Inventory()
    {
      this.ItemList = new List<Item>();
      this.OnItemListChanged = new EventHandler((sender, args) => { /* event logic */ });
    }
    
    // do other stuff
}
→ Ссылка