使用LINQ表达式动态生成带ref参数的事件处理程序时遇到绑定兼容异常问题
使用LINQ表达式动态生成带ref参数的事件处理程序时遇到绑定兼容异常问题
我最近在做一个功能:需要给一个预先不知道具体类型的对象上的所有事件都订阅处理程序,打算用System.Linq.Expressions.Expression在运行时动态生成事件处理委托。
目前写的代码几乎能正常工作,但麻烦的是有些事件并不遵循常见的sender+EventArgs参数模式,而且我完全没法控制这些事件的定义。其中还有些事件带有ref参数,当我尝试在处理程序里把值写回去的时候,在调用lambda.Compile()时就会抛出这个异常:
System.ArgumentException: 'Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.'
我知道换用IL发射可能能解决问题,但真的不想走这条路,有没有别的办法?
举个例子,这类有问题的事件定义是这样的:
public delegate void SomeEventDelegate(ref int a, int b); public event SomeEventDelegate SomeEvent;
我动态生成的lambda大致是这个结构:
(ref int a, int b) => { var __values__ ...
备注:内容来源于stack exchange,提问作者Timur Kelman
相关产品推荐
相关产品推荐

