c# - C# 动态方法 - 具有“对象”返回类型的字段获取器
问题描述
我需要将该字段作为“对象”类型。
这是该方法的 IL:
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
gen.Emit(OpCodes.Ret);
我应该添加什么来投射到对象。
感谢在线 C# 到 IL 工具,如果字段是值类型,我必须添加
OpCodes.Box
但是如果字段不是值类型怎么办。
我应该获取字段类型并为引用类型字段和值类型字段创建两个单独的动态方法。
另一个问题 :
我怎样才能破坏动态方法并重新创建它。(生命周期?)
解决方案
您需要将值类型结果装箱,例如:
public void EmitFieldGetter(ILGenerator gen, FieldInfo field)
{
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Ldfld, field);
if (field.FieldType.IsValueType)
{
gen.Emit(OpCodes.Box, field.FieldType);
}
gen.Emit(OpCodes.Ret);
}
推荐阅读
- python - 当我将 csv 文件加载到 jupyter notebook(使用 python 和 pandas)时,为什么列未对齐?
- php - 升级到 PHP 7 后会话不工作
- javascript - 在悬停css上定位多个元素
- node.js - 在 React-native 应用程序中使用 Axios 访问此资源错误消息需要完全身份验证
- xcode - 在 AppleScript 中运行带有参数的命令行工具
- java - Java:输入自动格式时,Selenium Webdriver 无法 sendKeys()
- angular6 - 将 nativescript 添加到 Angular 6 项目引发无法找到项目错误的构建目标
- c# - 为 EF 中的主键字段添加值
- python - 使用 matplotlib 打印到精确的物理尺寸
- mysql - 计算带前导零的数字