C#=>运营商?

时间:2011-04-25 17:47:50

标签: 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);
        }
   });
};

=>运算符实际上在做什么?它压倒了什么?

3 个答案:

答案 0 :(得分:69)

它被称为lambda operator

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

答案 1 :(得分:20)

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

在这种情况下

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

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

答案 2 :(得分:8)

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

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

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