UNITY : 无法取消订阅事件处理程序

问题描述

有人可以帮我解决这个问题吗? 这是我的代码:

private void Update()
{
    if (General.UpdateActive == true)
    {
        if (General.charActive == 0)
        {
            for (int i = 0; i < CharacterItem.equipmentSlots; i++)
            {
                CharacterItem.MC_EquipmentSlots[i].OnDropEvent += slot => OnDropEvent(slot);


                CharacterItem.Merc1_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);

                CharacterItem.Merc2_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);

                CharacterItem.Merc3_EquipmentSlots[i].OnDropEvent -= slot => OnDropEvent(slot);
            }
        }
        else if (General.charActive == 1)
        {
            for (int i = 0; i < CharacterItem.equipmentSlots; i++)
            {

            }
        }

对于 Mer1,同上,但将 MC 部分更改为 -=,将 Merc1 部分更改为 += 问题是当我选择其他字符时,事件处理程序不会取消订阅。 当我选择MC时,它在MC_EquipmentSlots中添加事件,然后当我选择Merc1时,MC_EquipmentSlots仍然有它的事件。

令人困惑的部分是,当我循环浏览字符时,口袋中的代码按预期工作。我尝试将口袋代码复制到设备代码中,但仍然出现我之前提到的错误。

CharacterItem.MC_PocketSlots[i].OnDropEvent += slot => EventHelper(slot,OnDropEvent);
CharacterItem.Merc1_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot,OnDropEvent);
CharacterItem.Merc2_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot,OnDropEvent);
CharacterItem.Merc3_PocketSlots[i].OnDropEvent -= slot => EventHelper(slot,OnDropEvent);

请提前帮助并感谢您。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)