透明代理和泛型接口之间一个莫名其妙的问题
在使用 .Net 4.0 运行时框架 RealProxy 类构造一个透明代理时,如果目标接口为泛型类型,或者继承一个泛型接口时,再通过 new Func 的方式调用泛型接口上的方法即会出现 System._Canon 类的问题。
很奇怪的一个问题,找了一个多小时了,已经追到 Com 函数调用了,仍然没找到原因,初步诊断为 .Net 框架的一个 Bug 。
代码如下:
using System; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Proxies; namespace TestRealProxy { internal class Program { private static void Main(string[] args) { var service = new MyRealProxy().GetTransparentProxy() as IInterface; // 正确的结果 var right = service.GetById(4); // 错误的结果 Func<int, MyClass> func = service.GetById; var error = func(3); } } public interface IInterface<T> where T : class { T GetById(int id); } public interface IInterface : IInterface<MyClass> { } public class MyClass { public int Id { get; set; } } public class MyRealProxy : RealProxy { public MyRealProxy() : base(typeof(IInterface)) { } public override IMessage Invoke(IMessage msg) { IMethodCallMessage methodCall = (IMethodCallMessage)msg; IMethodReturnMessage methodReturn = null; object[] copiedArgs = Array.CreateInstance(typeof(object), methodCall.Args.Length) as object[]; methodCall.Args.CopyTo(copiedArgs, 0); try { object returnValue = new MyClass { Id = (int)methodCall.Args[0] }; methodReturn = new ReturnMessage(returnValue, copiedArgs, copiedArgs.Length, methodCall.LogicalCallContext, methodCall); } catch (Exception ex) { methodReturn = new ReturnMessage(ex, methodCall); } return methodReturn; } } }
谁能解决这个问题?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2012-09-11 CPQuery SQL字符串拼接之 —— 凑热闹