Exemple #1
0
        Expression Decompile(MethodInfo method, Expression instance, IList <Expression> arguments)
        {
            var expression = method.Decompile(instance?.Type);

            var expressions = new Dictionary <Expression, Expression>();
            var argIndex    = 0;

            for (var index = 0; index < expression.Parameters.Count; index++)
            {
                var parameter = expression.Parameters[index];
                if (index == 0 && method.IsStatic == false)
                {
                    expressions.Add(parameter, instance);
                }
                else
                {
                    expressions.Add(parameter, arguments[argIndex++]);
                }
            }

            var body = new ReplaceExpressionVisitor(expressions).Visit(expression.Body);

            body = TransparentIdentifierRemovingExpressionVisitor.RemoveTransparentIdentifiers(body);
            return(Visit(body));
        }
        public static Expression RemoveTransparentIdentifiers(Expression expression)
        {
            Expression before;
            var        after   = expression;
            var        visitor = new TransparentIdentifierRemovingExpressionVisitor();

            do
            {
                before = after;
                after  = visitor.Visit(after);
            }while (after != before);

            return(after);
        }
        public static Expression RemoveTransparentIdentifiers(Expression expression)
        {
            Expression before;
            var after = expression;
            var visitor = new TransparentIdentifierRemovingExpressionVisitor();
            do
            {
                before = after;
                after = visitor.Visit(after);
            }
            while (after != before);

            return after;
        }