public Expression AutoInline(InvocationExpression expression) { this.isLocked = true; if (expression == null) { throw new ArgumentNullException("expression"); } var lambda = (LambdaExpression)expression.Expression; var childScope = new ExpressionRewriter(this); var lambdaParams = lambda.Parameters; var invokeArgs = expression.Arguments; if (lambdaParams.Count != invokeArgs.Count) { throw new InvalidOperationException("Lambda/invoke mismatch"); } for (var i = 0; i < lambdaParams.Count; i++) { childScope.Substitute(lambdaParams[i], invokeArgs[i]); } return childScope.Apply(lambda.Body); }