You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#新手求助:如何将Lambda表达式作为函数进行赋值?

解决C#中Click事件Lambda绑定的问题

嘿,作为从C++转过来的C#新手,你遇到的这个问题其实是C# Lambda语法的小细节差异导致的~

先看你写的代码:

playButton.Click += (object sender, RoutedEventArgs e) => (getController.startPlay());

问题出在你给startPlay()加了额外的括号,这会让C#把这个方法调用当成一个返回值表达式,但Click事件对应的委托(RoutedEventHandler)要求是**无返回值(void)**的方法,所以编译器会报错。

正确的实现方式有两种:

  • 去掉多余的括号,直接写方法调用(因为只有一条语句,不需要大括号):
    playButton.Click += (object sender, RoutedEventArgs e) => getController.startPlay();
    
  • 用大括号包裹语句(更清晰,适合后续可能扩展逻辑的场景):
    playButton.Click += (object sender, RoutedEventArgs e) => { getController.startPlay(); };
    

补充说明:

C++里的内联Lambda和C#的Lambda在语法上有细微区别,C#中:

  • 如果Lambda是无返回值且只有一条语句,可以直接写语句,不用加括号或大括号;
  • 如果有多条语句,必须用大括号包裹;
  • 如果是有返回值的Lambda,单条语句可以省略大括号,表达式结果会作为返回值,但这里Click事件不需要返回值,所以不能用带括号的表达式写法。

这样修改后代码就能正常运行啦!

内容的提问来源于stack exchange,提问作者eocamandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:37:19