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
相关产品推荐
相关产品推荐

