gpt4 book ai didi

c# - 重写 lambda 扩展方法

转载 作者:行者123 更新时间:2023-11-30 22:47:39 28 4
gpt4 key购买 nike

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

但是,我需要重置 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com