C ++中的匿名lambda函数的C ++ capture-clause等价

时间:2015-07-10 00:49:34

标签: c# c++ lambda delegates

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

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

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

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

delegate { hero.changeHP(10); }

但C#无法识别英雄对象。似乎我无法将其范围从调用类中引用。

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

1 个答案:

答案 0 :(得分:3)

C#中的lambda是这样编写的:

() => hero.changeHP(10);

由于这是一个无参数的lambda,你可以将它传递给Action实例,例如。

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

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