C# 中匿名 lambda 函数的 C++ 捕获子句等效项

C++ capture-clause equivalent for anonymous lambda functions in C#

我目前正在尝试将我用 C++ 编写的项目移植到 C# 框架。我 运行 遇到了将函数传递给另一个 class 的问题。

我有一个 class,PickupDef 将委托函数作为其构造函数中的参数。在 C++ 版本中,我会像这样传递函数:

[&]() { hero->changeHP(10); }

其中 hero 是调用中动态分配的对象 class。我试过在 C# 版本中使用它:

delegate { hero.changeHP(10); }

但 C# 无法识别 hero 对象。似乎我无法将其范围限定为从调用 class.

中获取引用

有没有办法在 C# 中获得 C++ [&]() 的功能?我可以将对英雄对象的引用传递给 PickupDef,但这需要对当前系统进行大修。

C#中的lambda是这样写的:

() => hero.changeHP(10);

由于这是一个无参数的 lambda,您可以将其作为 Action 实例传递,例如

Action setHpTo10 = () => hero.changeHP(10);

Lambda 固有地捕获您在 C# 中引用的变量。