emit创建泛型类该怎么创建啊

zhj2323232 2016-12-19 05:19:28
我用Opcodes.Newobj创建List<Tuple<String,Object>> 总是报 操作可能会破坏运行时稳定性

ConstructorInfo info = listType.GetConstructor(new Type[0]);
il.Emit(OpCodes.Newobj, info);


本人小白一枚,求大神指导!
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lee_Y_K 2016-12-20
  • 打赏
  • 举报
回复
像你这种操作感觉用不上Emit,简单反射一下就可以。 另外,Emit是不能随便用的。
zhj2323232 2016-12-20
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
使用稳定的东西,按照接口编程,强类型编程,不要滥用动态。远离那些噱头。
我是想写一个动态生成 添加DbParameter参数的方法,以后就不用再针对具体的类再去一个个编写了
  • 打赏
  • 举报
回复
使用稳定的东西,按照接口编程,强类型编程,不要滥用动态。远离那些噱头。
zhj2323232 2016-12-20
  • 打赏
  • 举报
回复
没人吗。。。
游离失所 2016-12-20
  • 打赏
  • 举报
回复
是这样创建没错的,你肯定是其它地方代码写错了。。 给你一个DEMO

    DynamicMethod method = new DynamicMethod("dynamicMethod", typeof(List<Tuple<string, object>>), new Type[] { typeof(string), typeof(object) });
            var il = method.GetILGenerator();
            var constructor = typeof(Tuple<,>).MakeGenericType(new Type[] { typeof(string), typeof(object) }).GetConstructor(new Type[] { typeof(string), typeof(object) });
            il.DeclareLocal(typeof(List<Tuple<string, object>>));
            il.DeclareLocal(typeof(Tuple<string, object>));
            il.Emit(OpCodes.Newobj, typeof(List<Tuple<string, object>>).GetConstructor(new Type[0]));
            il.Emit(OpCodes.Stloc, 0);
            il.Emit(OpCodes.Ldarg, 0);
            il.Emit(OpCodes.Ldarg, 1);
            il.Emit(OpCodes.Newobj, constructor);
            il.Emit(OpCodes.Stloc, 1);
            il.Emit(OpCodes.Ldloc, 0);
            il.Emit(OpCodes.Ldloc, 1);
            il.Emit(OpCodes.Callvirt, typeof(List<Tuple<string, object>>).GetMethod("Add"));
            il.Emit(OpCodes.Ldloc, 0);
            il.Emit(OpCodes.Ret);

            var dm = (Func<string, object, List<Tuple<string, object>>>)method.CreateDelegate(typeof(Func<string, object, List<Tuple<string, object>>>));
            var val = dm("我是", new { name = "LEE" });

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧