C# 委托动态转换问题

我有个问题,看似很简单,但是就是实现不了! 我要实现一个类似于下面代码行的功能 SomeDelegate d; d += (…)=>{….}; 由于用的是Swig自动生成的C#代码用来调用C++写的DLL; 这样的delgate类型有上百个 所以我要写一个函数来封装,类似于如下 T setDelegate(T d, T d2) where T: Delegate { return Delegate.Combine(d,d2) as T; } 调用的方法如下: setDelegate(d, (…)=>{…}); 第二个参数是lambda表达式; 但怎么也实现不了,原因是d是通过反射获得的,存储于一个结构record{object method, MethodInfo m}的method中;编译器即无法推断d的类型,也无法推断lambda表达式的类型;所以也无法通过编译; 我试了最简单的方案 delegate void SomeDelegate(); record data(object method, MethodInfo m) info; …. setDelegate(info.method,()=> { Messagebox.Show(“hello world!”);}); 编译报错说lambda表达式无法转换为delegate,套上Action,Combine函数说签名不一致; 我觉得是不是需要用Dynamic Method来生成il code做动态转换,还是有其他办法…….

c#调用c++要写很多Attribute 参数写对 指针写对,调用就行了

基本上还是语法的问题

上msdn 看一下 委托如何用泛型写吧

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632