c# - 使用不同的返回类型方法订阅 Action 事件
问题描述
我有一个事件:
public event Action OnDamageTaken;
我想在我的行为树中订阅它,但返回类型为 TaskStatus,当评估为 TaskStatus.Success 时,它将结束树中当前的任务执行,如下所示:
Vegetation.OnDestroy += VegetationDestroyed;
public TaskStatus VegetationDestroyed()
{
Owner.FindTask<JobChooser>().CurrentJob.OnJobCompleted();
return TaskStatus.Success;
}
但是,我收到以下错误:
这样的事情可以做到吗,如果没有,为什么?我认为由于 Action 事件不传递任何参数,因此,我们可以订阅具有任何返回类型的方法,只要该方法也不需要参数。
解决方案
您可以将方法包装在 lambda 中:
Vegetation.OnDestroy += () => VegetationDestroyed();
如果您想再次取消订阅该事件,则必须将 lambda 存储在一个变量中:
Action onDestroy = () => VegetationDestroyed();
Vegetation.OnDestroy += onDestroy;
Vegetation.OnDestroy -= onDestroy;
推荐阅读
- reactjs - 许多小的 react.CreateElement 对同一文档的性能影响?
- python - calcOpticalFlowFarneback 的结果是否需要在翘曲中进行一些处理?
- javascript - SVG 动画只能在网站的正确页面/部分上启动
- python-3.x - @client.event 从一个为假的 if 条件返回一个输出
- azure - Azure DevOps 中的应用服务名称显示未找到任何结果
- kotlin - 当语言为 kotlin 时,Tarantool 墨盒-springdata(tarantool 的弹簧数据)不起作用
- drupal - 无法在我的 drupal 9 中打开自定义模块
- deep-learning - Mask RCNN 在物体上制作矩形?
- sql - 有条件地对其他行中的字段求和
- r - 选择列时如何显示非 NA 值?