2009-07-08 13 views
22

Sınıflarımdan birinde bir işleyici eklemek istediğim bir etkinliğim var. Bununla birlikte, herhangi bir şey yapmak için işleyiciye ihtiyacım yok, çünkü sadece sınıfın davranışını ekli olan veya olmayan işleyiciyle test ediyorum. aşağıdaki gibiNo-op lambda

olay imzadır:

public event EventHandler<EventArgs> Foo; 

Yani böyle bir şey yapmak istiyorum:

myClass.Foo +=(); 

Ancak bu geçerli lambda ifade değil. Bunu ifade etmenin en özlü yolu nedir?

+2

Eğlence gerçeği: Ayrıca, olayları çağırmadan önce boş bir denetim yapmanıza gerek kalmadan olaylara boş delegeler ekleyebilirsiniz http://stackoverflow.com/a/1431993/1508243 –

cevap

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

veya

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

OK? :)

Ya

delegate {} 
+0

() => {} çalışmıyor. –

6

bu deneyin:

myClass.Foo += delegate {}; 
1

böyle böyle bir lambda aracılığıyla etkinliği ekleyin:

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

bu deneyin: Bir lambda üzerinde anonim yöntem sözdizimi kullanmayı tercih

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

:

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

yerine sonradan bir temsilci takmak, daha yaygın yolu hemen atarım etmektir Burada farklı farklı imzalarla çalışacağı şekilde ifade (burada out parametresi veya dönüş değerleri olmayanlar).

+0

Evet, ancak bu durumda varsayılan işleyici atamak istemiyorum. –

+0

Yeterince adil. (Şahsen bu günlerde belirttiğim her olaya bir tane koydum :) –

+0

Bu durumda, etkinliğe bağlı hiçbir işleyici yoksa, sınıfın farklı bir davranışı olması gerekir. Eğer kimse onu dinlemezse sessizce mırıldanır :) –