void Main()
{
Expression<Func<string, int>> 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;
}
}