C#=>;操作人员

C#=>;操作人员,c#,lambda,C#,Lambda,我有一个关于C#中的=>运算符的问题 我正在看Expression Blend 4示例。接触样品中有一条线,包括: //In C:\Program Files (x86)\Microsoft Expression\Blend 4\Samples\en\Contacts\ //Contacts\ViewModels\ContactsViewModel.cs: contactDetailWindow.Closed += (o, e) => {

我有一个关于C#中的
=>
运算符的问题

我正在看Expression Blend 4示例。接触样品中有一条线,包括:

//In C:\Program Files (x86)\Microsoft Expression\Blend 4\Samples\en\Contacts\
//Contacts\ViewModels\ContactsViewModel.cs: 

contactDetailWindow.Closed += (o, e) =>
{                              
   finishedCallback(contactDetailWindow.DialogResult);

   // Or, C:\Program Files (x86)\Microsoft Expression\Blend 4\Samples\en\
   // Contacts\Contacts\ViewModels\ContactsViewModel.cs
   this.EditContact(newContact, dialogResult =>
   {
        if (dialogResult.HasValue && dialogResult.Value)
        {
        this.Contacts.Add(newContact);
        }
   });
};
=>
操作符实际上在做什么?它是否覆盖了某些内容?

它被称为

与相同

b.Click += b_Click;

void b_Click(object sender, EventArgs e)
{
    Log("Sender :" + sender + "EventArgs " + e);
}


这是一个lambda表达式。下面定义了一个需要两个参数的异常方法。在卷曲的制动片内显然是该方法的主体:

(o, e) => { finishedCallback(contactDetailWindow.DialogResult)

Lambda表达式很难用几句话来解释。我想您必须查看文档和一些示例。

=>是一个lambda表达式运算符,您可以将其视为javascript中的匿名函数

在这种情况下

ContactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult);

它正在创建一个用作关闭事件处理程序的函数。编译器可以推断o和E的类型,因为它知道闭合delelegate的定义。

使用this=>lambda运算符和?。运算符作为函数参数,或以其他方式传递此结构,使整个程序无法读取且难以维护。请考虑一下。
(o, e) => { finishedCallback(contactDetailWindow.DialogResult)
ContactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult);