void Main() { Expression> expr = s => s.Length; expr.Dump(); var visitor = new ParameterReplacementVisitor( expr.Parameters[0], Expression.Parameter(typeof(string), "x")); var newExpr = visitor.Visit(expr); newExpr.Dump(); } public class ParameterReplacementVisitor : ExpressionVisitor { private readonly ParameterExpression _oldParam; private readonly ParameterExpression _newParam; public ParameterReplacementVisitor(ParameterExpression oldParam, ParameterExpression newParam) { _oldParam = oldParam; _newParam = newParam; } protected override Expression VisitParameter(ParameterExpression parameter) { if (parameter == _oldParam) return _newParam; return parameter; } }