&引用;方法名称应为“;尝试将处理程序方法添加到委托时出错-C#

&引用;方法名称应为“;尝试将处理程序方法添加到委托时出错-C#,c#,methods,delegates,handler,C#,Methods,Delegates,Handler,在尝试将a方法添加到委托时,我不断收到错误“预期的方法名称”。我有一个代理,当我的游戏结束时调用它。我试图添加到委托中的函数将停止闪烁的倒计时(该方法位于静态类中)。我已经到处搜索了,但我仍然不确定它为什么不起作用。以下是导致错误的行: LivesManager.gameend+=new LivesManager.EndGame(倒计时管理器.DisableFlashTimer(this)) 此将当前表单传递给方法,以便它可以禁用表单上的计时器闪烁 我之前已经将静态类中的方法添加到同一个委托中,

在尝试将a方法添加到委托时,我不断收到错误“预期的方法名称”。我有一个代理,当我的游戏结束时调用它。我试图添加到委托中的函数将停止闪烁的倒计时(该方法位于静态类中)。我已经到处搜索了,但我仍然不确定它为什么不起作用。以下是导致错误的行:

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))。使用更简单的版本会有什么损失吗?