Example #1
0
        private static MethodFactory.ExpressionArgsPair GetObjectCreatorExpressions(ConstructorInfo constructor)
        {
            ParameterExpression args = Expression.Parameter(typeof(object[]), "args");

            Expression[]  callArgsExpressions = MethodFactory.GetMethodCallArgsExpressions(constructor.GetParameters(), args);
            NewExpression newExpression       = Expression.New(constructor, callArgsExpressions);

            return(new MethodFactory.ExpressionArgsPair()
            {
                Expression = (Expression)newExpression,
                Parameters = new ParameterExpression[1]
                {
                    args
                }
            });
        }
Example #2
0
        private static MethodFactory.ExpressionArgsPair GetMethodCallExpressions(MethodInfo method)
        {
            ParameterExpression parameterExpression = Expression.Parameter(typeof(object), "instance");
            UnaryExpression     unaryExpression     = Expression.Convert((Expression)parameterExpression, method.DeclaringType);
            ParameterExpression args = Expression.Parameter(typeof(object[]), "args");

            Expression[] callArgsExpressions = MethodFactory.GetMethodCallArgsExpressions(method.GetParameters(), args);
            Expression   expression          = (Expression)Expression.Call(method.IsStatic ? (Expression)null : (Expression)unaryExpression, method, callArgsExpressions);

            if (method.ReturnType == typeof(void))
            {
                expression = (Expression)Expression.Block(expression, (Expression)Expression.Default(typeof(object)));
            }
            return(new MethodFactory.ExpressionArgsPair()
            {
                Expression = expression,
                Parameters = new ParameterExpression[2]
                {
                    parameterExpression,
                    args
                }
            });
        }