0
我目前正在尝试扩展使用反射(ILGenerator)创建动态方法的现有应用程序。相当于Expression.Convert使用Reflection.Emit
我目前在堆栈上有一个对象,这个方法需要将对象转换成与'parameterType'相同的类型。我想提供,我们使用Expression.Convert
public override void EmitParameterResolution(ILGenerator il, Type parameterType)
{
// il.Emit - Not sure what to do here...
// Expression.Convert(obj, parameterType)
}
请注意,castclass不处理值类型。在这种情况下,你需要unbox,但是你必须小心地将盒装值作为*确切类型*进行装箱。 (举例来说,你不能取消一个整型int。)`ChangeType()`会稍微简化一下,以一个额外的box/unbox操作为代价。 (如果你将一个盒装的int传递给`ChangeType()`并请求一个long,它将取消这个int的装箱,将它转换为一个long,然后将这个盒子解开。) – cdhowie 2013-06-10 16:37:45