&引用;方法名称应为“;尝试将处理程序方法添加到委托时出错-C#
在尝试将a方法添加到委托时,我不断收到错误“预期的方法名称”。我有一个代理,当我的游戏结束时调用它。我试图添加到委托中的函数将停止闪烁的倒计时(该方法位于静态类中)。我已经到处搜索了,但我仍然不确定它为什么不起作用。以下是导致错误的行:&引用;方法名称应为“;尝试将处理程序方法添加到委托时出错-C#,c#,methods,delegates,handler,C#,Methods,Delegates,Handler,在尝试将a方法添加到委托时,我不断收到错误“预期的方法名称”。我有一个代理,当我的游戏结束时调用它。我试图添加到委托中的函数将停止闪烁的倒计时(该方法位于静态类中)。我已经到处搜索了,但我仍然不确定它为什么不起作用。以下是导致错误的行: LivesManager.gameend+=new LivesManager.EndGame(倒计时管理器.DisableFlashTimer(this)) 此将当前表单传递给方法,以便它可以禁用表单上的计时器闪烁 我之前已经将静态类中的方法添加到同一个委托中,
LivesManager.gameend+=new LivesManager.EndGame(倒计时管理器.DisableFlashTimer(this))代码>
此
将当前表单传递给方法,以便它可以禁用表单上的计时器闪烁
我之前已经将静态类中的方法添加到同一个委托中,效果很好,唯一的区别是我将表单作为参数传递,然后它不喜欢它
有没有办法将表单传递给方法而不出错
提前感谢:)您可以使用lambda表达式:
LivesManager.gameEnded += () => CountdownManager.DisableFlashTimer(this);
我假设了一点,因为您没有包含gameend
或EndGame
的定义。我相信问题出在倒数管理器上。DisableFlashTimer(this)
不是一个方法名,而是一个方法调用。编译器试图将此方法调用的最终返回值传递给LivesManager.EndGame
构造函数,而LivesManager.EndGame
很可能是(void parameterless?)委托
也许你打算:
LivesManager.gameEnded +=
new LivesManager.EndGame(() => CountdownManager.DisableFlashTimer(this));
或者简单地说:
LivesManager.gameEnded += () => CountdownManager.DisableFlashTimer(this);
这很管用,谢谢:)但是我对lambda表达式有点困惑:根据我对lambda的了解,该方法的参数应该在
()
中,比如新的LivesManager.EndGame((这个)=>CountdownManager.DisableFlashTimer)代码>你能解释一下吗?lambda创建的匿名函数的参数名放在括号内。因此,(this)=>…
将尝试使用一个名为“this”的参数创建一个函数,类似于使用ReturnType MyFunc1(int this)
的方法(因为它是一个保留字,所以会呕吐)。()=>…
的lambda表达式类似于方法ReturnType MyFunc()
,其中在本例中ReturnType
是void
,因为没有返回任何内容。所以,()=>CountdownManager.DisableFlashTimer(这个)
类似于void MyFunc(){CountdownManager.DisableFlashTimer(这个);}
好的,我想我明白了:)再问一个问题:为什么新的LivesManager.EndGame(()=>CountdownManager.DisableFlashTimer(这个))
的工作原理与倒计时管理器相同。DisableFlashTimer(此)代码>?我最近一直在了解代表们提到的问题。在该教程中,为委托提供了一个处理程序方法,如LivesManager.gameend+=newlivesmanager.EndGame(()=>CountdownManager.DisableFlashTimer(this))代码>。使用更简单的版本会有什么损失吗?