我创建了一个扩展方法,它的工作原理就像我想要的那样。我注意到,party
和 property
参数以某种方式被“复制”到 lambda 表达式中。这样我就不需要维护编辑器/政党/属性关联的自定义列表。
但是,我需要重置 ButtonEdit 的 ButtonClick 事件。由于这是匿名的,我也无法使用 -= 运算符。
所以,我的问题是 - 如何重写这个方法以便可以删除委托(delegate)?或者,我可以使用哪种其他方法来处理具有额外参数(例如 party
和 property
)的特定事件处理程序?
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/