2009-07-08 15 views
22

Mam wydarzenie na jednej z moich zajęć, do którego chcę dołączyć opiekuna. Jednak nie potrzebuję obsługi, aby cokolwiek zrobić, ponieważ testuję zachowanie klasy z załączonymi załącznikami.No-op lambda

Podpis wydarzenie następująco:

public event EventHandler<EventArgs> Foo; 

Więc chcę zrobić coś takiego:

myClass.Foo +=(); 

Jednak nie jest to poprawne wyrażenie lambda. Jaki jest najbardziej zwięzły sposób wyrażenia tego?

+2

Zabawny fakt: można również dołączać pustych delegatów do wydarzeń, tak aby nie trzeba było wykonywać zerowej kontroli przed wywołaniem zdarzenia a la http://stackoverflow.com/a/1431993/1508243 –

Odpowiedz

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

lub

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

OK? :)

Albo

delegate {} 
+0

() => {} nie działa. –

6

Spróbuj tego:

myClass.Foo += delegate {}; 
1

Dołączanie zdarzenie poprzez lambda takie jak:

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

Spróbuj tego:

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

Zamiast dołączyć delegata później, tym bardziej powszechnym sposobem jest zrobić przypisać ją natychmiast:

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

Wolę używając anonimowego składni metody nad lambda wyrażenie tutaj, ponieważ będzie działać z różnymi różnymi sygnaturami (oczywiście nie tymi z parametrami out lub wartościami zwracanymi).

+0

Tak, ale w tym przypadku nie chcę przypisać domyślnego programu obsługi. –

+0

Wystarczająco fair. (Osobiście umieszczam jednego w niemal każdym zdarzeniu, które deklaruję w tych dniach :) –

+0

W tym przypadku klasa musi mieć inne zachowanie, jeśli nie ma dołączonych obsługi do zdarzenia. Jeśli nikt tego nie słucha, cicho mamrotam do siebie :) –