首页 > 解决方案 > 使用不同的返回类型方法订阅 Action 事件

问题描述

我有一个事件:

public event Action OnDamageTaken;

我想在我的行为树中订阅它,但返回类型为 TaskStatus,当评估为 TaskStatus.Success 时,它将结束树中当前的任务执行,如下所示:

Vegetation.OnDestroy += VegetationDestroyed;

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

但是,我收到以下错误:

错误

这样的事情可以做到吗,如果没有,为什么?我认为由于 Action 事件不传递任何参数,因此,我们可以订阅具有任何返回类型的方法,只要该方法也不需要参数。

标签: c#eventsevent-handlingaction

解决方案


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

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

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

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

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


推荐阅读