我对=>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的类型,因为它知道关闭的删除门的定义.
这是一个lambda表达式.以下定义了期望两个参数的anoymous方法.在卷曲的刹车里面显然是方法的主体:
(o, e) => { finishedCallback(contactDetailWindow.DialogResult)
Run Code Online (Sandbox Code Playgroud)
Lambda表达式很难用几句话来解释.我想你必须看看文档和一些例子.
| 归档时间: |
|
| 查看次数: |
30258 次 |
| 最近记录: |