无操作 lambda
Posted
技术标签:
【中文标题】无操作 lambda【英文标题】:No-op lambda 【发布时间】:2010-11-09 01:12:01 【问题描述】:我的一个类上有一个事件,我想附加一个处理程序。但是,我不需要处理程序来做任何事情,因为我只是在测试是否附加了处理程序的类的行为。
事件签名如下:
public event EventHandler<EventArgs> Foo;
所以我想做这样的事情:
myClass.Foo += ();
但是,这不是一个有效的 lambda 表达式。最简洁的表达方式是什么?
【问题讨论】:
有趣的事实:您还可以将空委托附加到事件,这样您就不需要在调用事件之前进行空检查 ***.com/a/1431993/1508243 【参考方案1】:myClass.Foo += (s,e) => ;
或
myClass.Foo += delegate ;
【讨论】:
【参考方案2】:(x,y) => //oops forgot the params
好吗? :)
或者
delegate
【讨论】:
【参考方案3】:试试这个:
myClass.Foo += delegate ;
【讨论】:
【参考方案4】:与其事后附加委托,更常见的方法是立即分配:
public event EventHandler<EventArgs> Foo = delegate ;
我更喜欢在这里使用匿名方法语法而不是 lambda 表达式,因为它可以处理各种不同的签名(诚然,不是那些带有 out
参数或返回值的签名)。
【讨论】:
是的,但在这种情况下,我不想分配默认处理程序。 很公平。 (我个人在这些天宣布的几乎每一个事件中都放了一个 :) 在这种情况下,如果没有附加到事件的处理程序,则该类需要具有不同的行为。如果没有人在听它,它会悄悄地自言自语:)【参考方案5】:试试这个:
myClass.Foo += (s,e) => ;
【讨论】:
【参考方案6】:通过像这样的 lambda 附加事件:
myClass.Foo += (o, e) =>
//o is the sender and e is the EventArgs
;
【讨论】:
以上是关于无操作 lambda的主要内容,如果未能解决你的问题,请参考以下文章