0
現在、リフレクション(ILGenerator)を使用して動的メソッドを作成する既存のアプリケーションを拡張しようとしています。Reflection.Emitを使用したExpression.Convertと同等
私は現在スタック上にオブジェクトを持っていますが、このメソッドはオブジェクトを 'parameterType'と同じ型に変換する必要があります。私はあなたがおそらくCastclassたいExpression.Convert
public override void EmitParameterResolution(ILGenerator il, Type parameterType)
{
// il.Emit - Not sure what to do here...
// Expression.Convert(obj, parameterType)
}
ここで、castclassは値の型を処理しないことに注意してください。その場合はunboxが必要ですが、boxed値をunboxするには注意が必要です。 (例えばintを長いものとしてunboxすることはできません) 'ChangeType()'はこれを幾分単純化します。余分なbox/unboxオペレーションを犠牲にします。 (BoxType intを 'ChangeType()'に渡してlongを要求すると、intをunboxし、longとboxに変換します。次にlongをunboxする必要があります)。 – cdhowie