Изменение имени параметра в LambdaExpression только для отображения

Допустим, у меня есть такое выражение:

Expression> exp

Если я назначу следующее выражение:

a => a.First() != 0

, а затем я вызываю exp. ToString () Я получу именно то выражение, которое передал, это прекрасно, но, предположим, мы хотим изменить имя, которое мы используем для 'a', на что-то другое, как мы можем это сделать? Замена строки не будет работать во всех случаях (она работает в приведенном выше примере, но что, если бы параметр был назван, например, 'i'?) Возможно ли иметь только замену имени параметра, времени выполнения, не влияя на семантику выражения?

ОБНОВЛЕНИЕ @PhilKlein работает отлично, но требует фреймворка 4. Но если нам нужно настроить таргетинг на фреймворк 3.5, мы можем использовать класс ExpressionVisitor из Мэтта Уоррена , просто изменив с защищенного на общедоступный Метод посещения.

13
задан Felice Pollano 19 December 2011 в 20:49
поделиться