c# - 重写 lambda 扩展方法

标签 c# event-handling lambda extension-methods

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

但是,我需要重置 ButtonEdit 的 ButtonClick 事件。由于这是匿名的,我也无法使用 -= 运算符。

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

private static void SetupAddressButtonClickEvent(this ButtonEdit editor, Party party, string property)
{
    editor.SetAddressDisplayText(party, property);
    editor.ButtonClick += (sender, e) =>
        {
            party.ShowAddressLookupDialog(property);
            editor.SetAddressDisplayText(party, property);
        };
}

谢谢你, 斯特凡

最佳答案

Action<object,EventArgs> myaction = (sender, e) =>
        {
            party.ShowAddressLookupDialog(property);
            editor.SetAddressDisplayText(party, property);
        };

editor.ButtonClick += myaction;
editor.ButtonClick -= myaction;

编辑选项 2 可能是:

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;

我不确定这对您有多大帮助,因为我不能 100% 理解您想要解决的问题。

关于c# - 重写 lambda 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160710/

相关文章:

Groovy:方法的模棱两可的方法重载

c++ - 初始化和 lambda 类型参数

c# - 为什么使用 Json.NET 时会出现 RuntimeBinderException?

c# - 在内存中缓存数据库表

c# - 如何将多个视觉元素作为一项任务批量打印?

c# - 什么是DenseVector?如何使用?

java - 在 Jpanel 上拖动形状

c# - 如何使用控件数组在 C# 中获取给定对象的数组索引?

python - 使用 python 的带有 if 语句的简单 lambda 函数

java - 鼠标事件在java中随机点击