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