【问题标题】:No-op lambda无操作 lambda
【发布时间】:2010-11-09 01:12:01
【问题描述】:

我的一个类上有一个事件,我想附加一个处理程序。但是,我不需要处理程序来做任何事情,因为我只是在测试是否附加了处理程序的类的行为。

事件签名如下:

public event EventHandler<EventArgs> Foo;

所以我想做这样的事情:

myClass.Foo += ();

但是,这不是一个有效的 lambda 表达式。最简洁的表达方式是什么?

【问题讨论】:

标签: c# .net lambda


【解决方案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
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-23
            • 2014-02-23
            • 2010-10-17
            • 1970-01-01
            • 2019-11-11
            • 1970-01-01
            • 1970-01-01
            • 2021-12-10
            相关资源
            最近更新 更多