Что я действительно хочу сделать, это что-то вроде этого (я понимаю, что это не правильный код):
// 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 всегда будет получать изEventHandler .Однако я не могу просто сделать:
EventHandler<AutoWrapEventArgs> handler = (sender, raw) =>
{
AutoWrapEventArgs args = raw as AutoWrapEventArgs;
func.Call(this, args.GetParameters());
};
e.AddEventHandler(this, handler);
Поскольку .NET жалуется, что нет никакого преобразования, применимого от EventHandler к EventHandler , когда вызывается AddEventHandler.Это точное сообщение:
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 () (потому чтонет преобразования из делегата в объект).
Есть ли способ, которым я могу использовать отражение , чтобы обойти эту проблему?