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