我对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);
}
});
};
=>
运算符实际上在做什么?它压倒了什么?
答案 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表达式很难用几句话来解释。我想你必须看一下文档和一些例子。