使用不同的 return 类型方法订阅 Action 事件

Subscribe to an Action event with a different return type method

我有一个活动:

public event Action OnDamageTaken;

我想在我的行为树中订阅它,但是使用 return 类型的 TaskStatus,当评估为 TaskStatus.Success 时,将结束树中的当前任务执行,例如所以:

Vegetation.OnDestroy += VegetationDestroyed;

public TaskStatus VegetationDestroyed()
{
    Owner.FindTask<JobChooser>().CurrentJob.OnJobCompleted();
    return TaskStatus.Success;
}

但是,我收到以下错误:

是否可以做这样的事情,如果不能,为什么?我认为由于 Action 事件不传递任何参数,因此,我们可以使用具有任何 return 类型的方法进行订阅,只要该方法也不需要参数。

您可以将方法包装在 lambda 中:

Vegetation.OnDestroy += () => VegetationDestroyed();

如果您想再次取消订阅该事件,您必须将 lambda 存储在一个变量中:

Action onDestroy = () => VegetationDestroyed();
Vegetation.OnDestroy += onDestroy;
Vegetation.OnDestroy -= onDestroy;

在线演示:https://dotnetfiddle.net/AOYqbf