J’ai une question à propos de l’opérateur =>
en C #.
Je regarde les échantillons Expression Blend 4. Il existe une ligne dans l’exemple Contact qui comprend:
//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); } }); };
Que fait réellement l’opérateur =>
? Est-ce prioritaire?
=> est un opérateur d’expression lambda que vous pouvez considérer comme une fonction anonyme en javascript
dans ce cas
ContactDetailWindow.Closed += (o, e) => { finishedCallback(contactDetailWindow.DialogResult);
il crée une fonction qui est utilisée comme gestionnaire pour l’événement fermé. Le compliant peut déduire les types de o et E puisqu’il connaît la définition du délélégé fermé.
C’est ce qu’on appelle l’ opérateur lambda .
b.Click += (s, e) => Log("Sender :" + s + "EventArgs " + e);
est identique à
b.Click += b_Click; void b_Click(object sender, EventArgs e) { Log("Sender :" + sender + "EventArgs " + e); }
ou
b.Click += delegate(object sender, EventArgs e) { Log("Sender :" + sender + "EventArgs " + e); };
C’est une expression lambda. Ce qui suit définit une méthode anormale qui attend deux parameters. À l’intérieur des brakets frisés se trouve évidemment le corps de la méthode:
(o, e) => { finishedCallback(contactDetailWindow.DialogResult)
Les expressions lambda sont difficiles à expliquer en quelques phrases. Je suppose que vous devez consulter la documentation et quelques exemples.