我目前正在尝试将我用C ++编写的项目移植到C#框架。我遇到了将函数传递给另一个类的问题。
我有一个类PickupDef,它在其构造函数中将委托函数作为一个paremeter。在C ++版本中,我会像这样传递函数:
[&]() { hero->changeHP(10); }
其中hero是调用类中动态分配的对象。我尝试在C#版本中使用它:
delegate { hero.changeHP(10); }
但C#无法识别英雄对象。似乎我无法将其范围从调用类中引用。
有没有办法在C#中获得C ++ [&]()
的功能?我可以将对英雄对象的引用传递给PickupDef,但这需要对当前系统进行大修。
答案 0 :(得分:3)
C#中的lambda是这样编写的:
() => hero.changeHP(10);
由于这是一个无参数的lambda,你可以将它传递给Action
实例,例如。
Action setHpTo10 = () => hero.changeHP(10);
Lambdas固有地捕获您在C#中引用的变量。