2009-07-08 10 views
22

ハンドラを添付したいクラスのイベントがあります。しかし、ハンドラをつけたクラスの振る舞いをテストしているだけなので、ハンドラが何もする必要はありません。次のようにNo-opラムダ

イベントシグネチャは次のとおりです。

public event EventHandler<EventArgs> Foo; 

だから私のような何かをしたい:しかし、これは有効なラムダ式ではありません

myClass.Foo +=(); 

を。これを表現する最も簡潔な方法は何ですか?

+2

イベントに空のデリゲートを添付すると、イベントを呼び出す前にヌルチェックを行う必要はありません。http://stackoverflow.com/a/1431993/1508243 –

答えて

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

または

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

OK? :)

それとも

delegate {} 
+0

()=> {}は機能しません。 –

6

これを試してみてください:

myClass.Foo += delegate {}; 
1

は、そのようなのようなラムダを経由してイベントをアタッチ:

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

はこのお試しください:

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

ではなく、その後、デリゲートを添付し、より一般的な方法は、すぐにそれを割り当てる行うことです。

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

私はラムダオーバー匿名メソッドの構文を使用して好みますここでは様々な異なるシグネチャ(確かにoutのパラメータまたは戻り値を持つものではない)で動作するため、ここでの式を使用します。

+0

はい、この場合、私はデフォルトハンドラを割り当てたくありません。 –

+0

十分に公正です。 (個人的には、私が最近宣言したちょうどすべてのイベントに1つ入れます:) –

+0

この場合、クラスには、イベントにハンドラが添付されていない場合、別の動作が必要です。誰もそれを聞いていないならば、それは静かに自分自身に混乱します:) –