2009-07-08 7 views
22

Ho un evento su una delle mie classi a cui voglio associare un gestore. Tuttavia, non ho bisogno che il gestore faccia qualcosa, poiché sto solo testando il comportamento della classe con i gestori collegati o meno.No-op lambda

La firma manifestazione è il seguente:

public event EventHandler<EventArgs> Foo; 

quindi voglio fare qualcosa di simile:

myClass.Foo +=(); 

Tuttavia questo non è un'espressione lambda valida. Qual è il modo più succinto di esprimerlo?

+2

Un fatto divertente: puoi anche associare i delegati vuoti agli eventi in modo che non sia necessario eseguire un controllo Null prima di richiamare l'evento a http://stackoverflow.com/a/1431993/1508243 –

risposta

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

o

myClass.Foo += delegate {}; 
9
(x,y) => {} //oops forgot the params 

OK? :)

O

delegate {} 
+0

() => {} non funziona. –

6

Prova questa:

myClass.Foo += delegate {}; 
1

Fissare l'evento tramite un lambda come tale:

myClass.Foo += (o, e) => { 
    //o is the sender and e is the EventArgs 
}; 
3

Prova questo:

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

Anziché collegare un delegato in seguito, il modo più comune è quello di non assegnarlo immediatamente:

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

Io preferisco usare la sintassi metodo anonimo su un lambda Espressione qui come funzionerà con varie firme diverse (certamente non quelle con i parametri out o valori di ritorno).

+0

Sì, ma in questo caso non desidero assegnare un gestore predefinito. –

+0

Abbastanza giusto. (Personalmente ne metto uno in quasi tutti gli eventi che dichiaro in questi giorni :) –

+0

In questo caso la classe deve avere un comportamento diverso se non ha nessun gestore collegato all'evento. Se nessuno lo sta ascoltando, mormora tranquillamente a se stesso :) –

Problemi correlati