我实际上想做的是这样的(我意识到这不是有效的代码):
// Attach the event.
try
{
EventInfo e = mappings[name];
(e.EventHandlerType) handler = (sender, raw) =>
{
AutoWrapEventArgs args = raw as AutoWrapEventArgs;
func.Call(this, args.GetParameters());
};
e.AddEventHandler(this, handler);
}
...
现在我知道 e.EventHandlerType 将始终derive来自事件处理程序。但是,我不能只是这样做:
EventHandler<AutoWrapEventArgs> handler = (sender, raw) =>
{
AutoWrapEventArgs args = raw as AutoWrapEventArgs;
func.Call(this, args.GetParameters());
};
e.AddEventHandler(this, handler);
正如 .NET 抱怨的那样,当调用 AddEventHandler 时,没有适用于从 EventHandler 到 EventHandler 的转换。这是确切的消息:
Object of type 'System.EventHandler`1[IronJS.AutoWrapObject+AutoWrapEventArgs]'
cannot be converted to type
'System.EventHandler`1[Node.net.Modules.Streams.NodeStream+DataEventArgs]'.
我还尝试使用 Invoke 动态使用 e.EventHandlerType 的构造函数,但无法将委托定义传递到 Invoke() 的参数列表(因为没有从委托到对象的转换)。
有什么办法我可以使用反射解决这个问题?