Допустим, у меня есть такое выражение:
Expression<Predicate<T>> exp
Если я назначу следующее выражение:
a => a.First() != 0
и затем я звоню exp.ToString()
Я получу именно то выражение, которое я передал, это совершенно хорошо, но, предположим, мы хотим изменить имя, которое мы используем для «а», на что-то еще, как мы можем это сделать?
Замена строки не подходит во всех случаях (она работает в приведенном выше примере, но что, если параметр называется «i», например?)
Можно ли просто заменить имя параметра во время выполнения, не затрагивая семантическое выражение?
UPDATE
@PhilKlein работает отлично, но требует фреймворка 4. Но если нам нужно нацелиться на фреймворк 3.5, мы можем использовать класс ExpressionVisitor из Мэтта Уоррена , просто изменив защищенный для общего доступа Метод посещения.