能否合并主体相同的两个Lambda表达式以避免重复代码?
可以合并Lambda表达式避免重复代码吗?
当然可以,核心思路就是把两段Lambda里重复的逻辑抽成独立的异步方法,再分别绑定到两个事件上,这样就不用重复维护相同代码了。
先看你原来的代码:
myEntry.Unfocused += async (s, e) => { // 重复的代码 } myButton.Clicked += async (s, e) => { // 重复的代码 }
重构方案:
- 把重复逻辑提取成独立的异步方法,注意参数要兼容两个事件的委托类型(
Unfocused事件的参数是FocusEventArgs,Clicked是EventArgs,因为FocusEventArgs继承自EventArgs,所以用EventArgs作为参数就能同时兼容两个事件):
private async void HandleSharedLogic(object sender, EventArgs e) { // 这里放原来的重复代码 }
- 直接把这个方法绑定到两个事件上:
myEntry.Unfocused += HandleSharedLogic; myButton.Clicked += HandleSharedLogic;
如果后续需要针对不同事件做细微调整,也可以在HandleSharedLogic里通过判断sender的类型或者e的类型来区分处理,依然不用写重复代码。
内容的提问来源于stack exchange,提问作者Costas
相关产品推荐
相关产品推荐

