使用Emit实现给实体赋值

使用Emit实现给实体赋值,第1张

概述代码: public static Action<T, object> EmitSetter<T>(string propertyName) { var type = type

代码:

public static Action<T,object> EmitSetter<T>(string propertyname){    var type = typeof(T);    var dynamicmethod = new Dynamicmethod("EmitCall",1)">null,1)">new[] { type,1)">typeof(object) },type.Module);    var iLGenerator = dynamicmethod.GetILGenerator();    var callMethod = type.getmethod(set_" + propertyname,BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.Public);    var parameterInfo = callMethod.GetParameters()[0];    var local = iLGenerator.DeclareLocal(parameterInfo.ParameterType,1)">true);    iLGenerator.Emit(OpCodes.Ldarg_1);    if (parameterInfo.ParameterType.IsValueType)    {        iLGenerator.Emit(OpCodes.UnBox_Any,parameterInfo.ParameterType); // 如果是值类型,拆箱    }    else    {        iLGenerator.Emit(OpCodes.Castclass,1)"> 如果是引用类型,转换    }    iLGenerator.Emit(OpCodes.Stloc,local);    iLGenerator.Emit(OpCodes.Ldarg_0);    iLGenerator.Emit(OpCodes.Ldloc,local);    iLGenerator.EmitCall(OpCodes.Callvirt,callMethod,null);    iLGenerator.Emit(OpCodes.Ret);    return dynamicmethod.CreateDelegate(typeof(Action<T,1)">object>)) as Action<T,1)">object>;}
VIEw Code

摘自博客:https://www.cnblogs.com/czly/archive/2018/06/01/9120280.HTML

 

总结

以上是内存溢出为你收集整理的使用Emit实现给实体赋值全部内容,希望文章能够帮你解决使用Emit实现给实体赋值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存