从动态方法获取局部变量,ExceptionHandlingClauses和IL数组

时间:2018-03-12 15:31:39

标签: c# reflection cil

从方法库中,我需要获取IL指令的数组,该方法异常处理程序的位置和种类以及该方法中的局部变量。

目前要这样做(对于我刚刚做的非动态方法)

            MethodBody pBody = pMethod.GetMethodBody();

            Method = pMethod;
            MethodName = pMethod.Name;
            IsPublic = pMethod.IsPublic;
            IsStatic = pMethod.IsStatic;
            Instructions = pBody.GetILAsByteArray();

            Variables = pBody.LocalVariables.ToArray();

            Module = pMethod.Module;
            MethodInfo pMethodInfo = pMethod as MethodInfo;
            ReturnType = pMethodInfo == null ? typeof(void) : pMethodInfo.ReturnType;

            ExceptionHandlers = pBody.ExceptionHandlingClauses.ToArray();
            Position = 0;

            mhashExceptionParameters = new HashSet<ParameterExpression>();
            mdictLocalExpressions = new Dictionary<LocalVariableInfo, ParameterExpression>();

但是,如前所述,GetMethodBody()不适用于动态方法(例如,通过编译linq表达式获得的方法句柄)。我知道这里的某些答案显示了如何获得IL指令。但是如何在方法体中获取其他内容,例如Variables和Exceptionhandlers?

作为参考,请参阅此问题,其中给出了获取IL字节数组的解决方案。 How do I get an IL bytearray from a DynamicMethod?

0 个答案:

没有答案