代码:
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实现给实体赋值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)