C#=>;操作人员
我有一个关于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) => {
=>
运算符的问题
我正在看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);