首页 > 解决方案 > C# 需要帮助理解奇怪的 Lambda 构造

问题描述

今天我在ac#项目中遇到了这段代码:

public partial class LoginView : UserControl
    {
        public LoginView()
        {
            this.InitializeComponent();
            this.Loaded += (s, e) => this.user.Focus();
        }
     ...
    }

this.Loaded 被声明

public delegate void RoutedEventHandler(object sender, RoutedEventArgs e);

好的,所以我们可以添加一个带有两个参数的事件处理程序代码,一个对象类型的 sender 和一个 RoutedEventArgs e。实际分配的是

public bool Focus ();

在我看来,这似乎是一个不带参数并返回布尔值的函数。

代码确实有效,我想我理解它的作用(如果 this.loaded 触发,聚焦一个名为“user”的文本框)但为什么这段代码有效?

谢谢,

阿明。

标签: c#

解决方案


您没有将Focus方法分配给Loaded委托。代码实际上在做什么,是将 lambda 分配给符合委托定义的委托。

编码

 this.Loaded += (s, e) => this.user.Focus();

实际上是这个的简写:

 this.Loaded += new RoutedEventHandler(FocusSomething);

并且FocusSomething上面代码片段中的方法将被声明为

public void FocusSomething(object sender, RoutedEventArgs args)
{
    this.user.Focus();
}

您只是“忽略”该Focus方法的返回值,但分配给委托的方法具有 void 返回类型并接受 2 个参数(对象和 RoutedEventArgs,所以这只是有效的)。


推荐阅读