С# => оператор?
У меня вопрос о операторе =>
в С#.
Я просматриваю образцы 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);
}
});
};
Что действительно делает оператор =>
? Это что-то переопределяет?
Ответы
Ответ 1
= > является оператором выражения лямбда, который вы можете рассматривать как анонимную функцию в javascript
в этом случае
ContactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult);
он создает функцию, которая используется как обработчик закрытого события. Составитель может вывести типы o и E, поскольку он знает, что происходит с закрытым делегататом.
Ответ 2
Он назвал 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);
};
Ответ 3
Это лямбда-выражение. Нижеследующее определяет метод анома, ожидающий два параметра. Внутри фигурных скобок, очевидно, находится тело метода:
(o, e) => { finishedCallback(contactDetailWindow.DialogResult)
Лямбда-выражения трудно объяснить в нескольких предложениях. Думаю, вам нужно взглянуть на документацию и несколько примеров.