gpt4 book ai didi

c# - 从 DynamicObject 中删除事件

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:59 26 4
gpt4 key购买 nike

我已成功将事件处理程序添加到我的动态对象中。但是,我无法删除它们。

dynamic d = new MyDynamicObject();
d.MyEvent += new EventHandler(this.MyHandler);
d.MyEvent -= new EventHandler(this.MyHandler);

当我添加事件处理程序时,我收到一个以处理程序作为参数的 TrySetMember 调用,但是,当删除它时,该值为 null。如果它为 null,我应该如何知道要从该特定事件的处理程序内部存储中删除哪个处理程序?

最佳答案

如果不查看代码片段,很难猜出问题所在。我将只发布一些简单有效的内容:

using System;
using System.Dynamic;

class Program {
static void Main(string[] args) {
dynamic obj = new MyDynamicObject();
obj.MyEvent += new EventHandler(handler);
obj.MyEvent(null, EventArgs.Empty);
obj.MyEvent -= new EventHandler(handler);
}
static void handler(object sender, EventArgs e) { }
}

class MyDynamicObject : DynamicObject {
private EventHandler dlg = new EventHandler(delegate { });
public override bool TryGetMember(GetMemberBinder binder, out object result) {
result = dlg;
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value) {
dlg = (EventHandler)value;
return true;
}
}

关于c# - 从 DynamicObject 中删除事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797112/

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