有人可以帮我解决这个问题吗? 这是我的代码:
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);
请提前帮助并感谢您。
答案 0 :(得分:0)
当您使用 lambda 表达式作为事件侦听器时会发生这种情况!它们不可订阅 ;)
而是添加和删除侦听器,例如
CharacterItem.MC_EquipmentSlots[i].OnDropEvent += OnDropEvent;
CharacterItem.Merc1_EquipmentSlots[i].OnDropEvent -= OnDropEvent;
CharacterItem.Merc2_EquipmentSlots[i].OnDropEvent -= OnDropEvent;
CharacterItem.Merc3_EquipmentSlots[i].OnDropEvent -= OnDropEvent;