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; }