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表达式很难用几句话来解释。 我想你必须看一下文档和一些例子。