C#=>运营商?

hea*_*ude 22 c# lambda

我对=>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);
        }
   });
};
Run Code Online (Sandbox Code Playgroud)

什么是=>运营商真正在做什么?它是否压倒一切?

Bal*_*a R 69

它被称为lambda运算符.

 b.Click += (s, e) => Log("Sender :" + s + "EventArgs " + e);
Run Code Online (Sandbox Code Playgroud)

是完全相同的

b.Click += b_Click;

void b_Click(object sender, EventArgs e)
{
    Log("Sender :" + sender + "EventArgs " + e);
}
Run Code Online (Sandbox Code Playgroud)

要么

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


rer*_*run 20

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

在这种情况下

ContactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult);
Run Code Online (Sandbox Code Playgroud)

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


Ach*_*him 8

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

(o, e) => { finishedCallback(contactDetailWindow.DialogResult)
Run Code Online (Sandbox Code Playgroud)

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