使用Reflection.Emit等效于Expression.Convert

时间:2011-02-07 04:05:48

标签: c# reflection.emit

我目前正在尝试扩展使用反射(ILGenerator)创建动态方法的现有应用程序。

我目前在堆栈上有一个对象,此方法需要将对象转换为与'parameterType'相同的类型。我想提供与使用Expression.Convert

时相同的转换功能
public override void EmitParameterResolution(ILGenerator il, Type parameterType)
{
    // il.Emit - Not sure what to do here...
    // Expression.Convert(obj, parameterType)
} 

1 个答案:

答案 0 :(得分:0)

您可能需要Castclass

public override void EmitParameterResolution(ILGenerator il, Type parameterType)
{
    il.Emit(OpCodes.Castclass, parameterType);
}

您可能还会考虑Call,在obj之后将参数类型放在堆栈上,然后执行以下操作:

MethodInfo mi = typeof(Convert).GetMethod("ChangeType");
il.Emit(OpCodes.Call, mi);