c# Delegate:如何在具有潜在异常的事件(Delegate)上调用所有方法?

cdy*_*oby 0 c# events delegates

System.Action用作我的代表。

public event Action myEvent;
myEvent+=MyMethod1;
myEvent+=MyMethod2;
Run Code Online (Sandbox Code Playgroud)

还有别的地方

myEvent.Invoke();
Run Code Online (Sandbox Code Playgroud)

现在的问题是,MyMethod1()调用时会出现异常。但我仍然希望MyMethod2()在此调用期间被调用。

怎么做?

关于潜在的异常:这实际上是一个 Unity 问题,当一个方法注册到一个事件时,并且该方法包含游戏对象交互。当相关的 MonoBehaviour 删除时,该方法仍然存在,但游戏对象交互会抛出异常。

Lua*_*aan 5

这是那些棘手的事情之一。事件处理程序不得返回值。如果您希望事情具有合理的确定性,这包括抛出异常。对于抛出的异常,处理程序调用者真正能做什么?

但是您的示例非常清楚地表明您的问题出在处理程序本身 - 修复处理程序。不应该仅仅因为游戏对象不再存在就抛出异常!您还需要确保在适当的时间从事件中正确删除所有处理程序。听起来您的处理程序在事件中一直存在,而它们早就应该被删除了。