C# 重写lambda扩展方法

C# 重写lambda扩展方法,c#,event-handling,lambda,extension-methods,C#,Event Handling,Lambda,Extension Methods,我已经创建了一个扩展方法,它的工作方式和我想要的一样。我注意到,party和property参数以某种方式被“复制”到lambda表达式中。这样,我就不需要维护编辑器/参与方/属性关联的自定义列表 但是,我需要重置ButtonEdit的ButtonClick事件。因为这个是匿名的,所以我也不能使用-=操作符 所以,我的问题是-我如何重写这个方法以便删除委托?或者,我可以使用其他哪种方法来处理带有额外参数的特定事件处理程序(例如party和property) 谢谢,, 斯特凡 然后像这样使用它:

我已经创建了一个扩展方法,它的工作方式和我想要的一样。我注意到,
party
property
参数以某种方式被“复制”到lambda表达式中。这样,我就不需要维护编辑器/参与方/属性关联的自定义列表

但是,我需要重置ButtonEdit的ButtonClick事件。因为这个是匿名的,所以我也不能使用-=操作符

所以,我的问题是-我如何重写这个方法以便删除委托?或者,我可以使用其他哪种方法来处理带有额外参数的特定事件处理程序(例如
party
property

谢谢,, 斯特凡

然后像这样使用它:

var handler = new MyEventHandler(party,property,editor);
editor.ButtonClick += handler.Handler;

我不确定这对您有多大帮助,因为我无法100%理解您试图解决的问题。

因此我需要在内部存储一个ButtonEdit/操作关联列表?我不知道您试图从何处删除操作,因此我无法真正帮助您删除它。是否尝试在另一个单击处理程序中删除它?我在重新绑定窗体上的控件之前删除事件处理程序。如果我不重置已处置对象,事件处理程序将引用该对象。不过你的选择2看起来很有趣。这种方法有名称吗?在选项1中,事件必须在处理程序内部取消订阅,否则事件几乎不会触发。。。这些天我问了一个类似的问题:恐怕我还没有看到任何地方记录了选项2。选项1实际上是一个部分代码示例,它只显示了机制,但需要将事件setter和de setter分开。
Action<object,EventArgs> myaction = (sender, e) =>
        {
            party.ShowAddressLookupDialog(property);
            editor.SetAddressDisplayText(party, property);
        };

editor.ButtonClick += myaction;
editor.ButtonClick -= myaction;
class MyEventHandler
{
  ... _property;
  ... _party;
  ... _editor;
  public MyEventHandler(... property, ... party, ... editor)
  {
    _property = property;
    _party = party;
    _editor = editor;
  }

  public void Handler(object sender, EventArgs e)
  {
    _party.ShowAddressLookupDialog(_property);
    _editor.SetAddressDisplayText(_party, _property);
  }
}
var handler = new MyEventHandler(party,property,editor);
editor.ButtonClick += handler.Handler;