La spécification C# indique explicitement (IIRC) que si vous avez deux fonctions anonymes (méthodes anonymes ou expressions lambda), il peut ou non créer des délégués égaux à partir de ce code. (Deux délégués sont égaux s'ils ont des cibles égales et font référence aux mêmes méthodes).
Pour être sûr, vous devez vous souvenir de l'instance de délégué que vous avez utilisée :
EventHandler handler = (s, e) => MessageBox.Show("Woho");
button.Click += handler;
...
button.Click -= handler;
(Je ne peux pas trouver la partie pertinente de la spécification, mais je serais assez surpris de voir le compilateur C# essayer agressivement de créer des délégués égaux. Il serait certainement peu judicieux de s'y fier).
Si vous ne voulez pas faire cela, vous devrez extraire une méthode :
public void ShowWoho(object sender, EventArgs e)
{
MessageBox.Show("Woho");
}
...
button.Click += ShowWoho;
...
button.Click -= ShowWoho;