No-op lambda

J'ai un événement sur l'une de mes classes auquel je veux attacher un gestionnaire. Cependant, je n'ai pas besoin que le gestionnaire fasse quoi que ce soit, car je teste simplement le comportement de la classe avec des gestionnaires attachés ou non.

La signature de l'événement est la suivante:

public event EventHandler<EventArgs> Foo;

Donc, je veux faire quelque chose comme:

myClass.Foo += ();

Cependant, ce n'est pas une expression lambda valide. Quelle est la façon la plus succincte d'exprimer cela?

22
demandé sur Matt Howells 2009-07-08 17:46:00

6 réponses

myClass.Foo += (s,e) => {};

Ou

myClass.Foo += delegate {};
28
répondu Matt Howells 2009-07-08 13:50:55
(x,y) => {} //oops forgot the params

OK? :)

Ou

delegate {}
9
répondu leppie 2009-07-08 13:47:06

Essayez ceci:

myClass.Foo += delegate {};
6
répondu Andrew Hare 2009-07-08 13:47:11

Plutôt que d'attacher un délégué par la suite, la manière la plus courante est de l'assigner immédiatement:

public event EventHandler<EventArgs> Foo = delegate {};

Je préfère utiliser la syntaxe de la méthode anonyme plutôt qu'une expression lambda ici car elle fonctionnera avec différentes signatures différentes (certes pas celles avec des paramètres out ou des valeurs de retour).

5
répondu Jon Skeet 2009-07-08 13:54:05

Essayez ceci:

myClass.Foo += (s,e) => {};
3
répondu Arjan Einbu 2009-07-08 13:51:14

Attachez l'événement via un lambda comme tel:

myClass.Foo += (o, e) => {
    //o is the sender and e is the EventArgs
};
1
répondu Andreas Grech 2009-07-08 13:48:44