C#=>运营商?

我对C#中的=>运算符有疑问。

我正在查看Expression Blend 4样本。 Contact示例中有一行包括:

 //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); } }); }; 

什么是=>运算符实际上在做什么? 它是否压倒一切?

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

在这种情况下

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

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

它被称为lambda运算符 。

  b.Click += (s, e) => Log("Sender :" + s + "EventArgs " + e); 

是完全相同的

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

要么

 b.Click += delegate(object sender, EventArgs e) { Log("Sender :" + sender + "EventArgs " + e); }; 

这是一个lambda表达式。 以下定义了期望两个参数的anoymous方法。 在curl的刹车里面显然是方法的主体:

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

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