Diciamo che ho un'espressione come questa:Cambiare nome del parametro in un LambdaExpression solo per la visualizzazione
Expression<Predicate<T>> exp
Se assegno la seguente espressione:
a => a.First() != 0
e poi chiamo exp.ToString()
otterrò esattamente l'espressione che ho passato, è perfettamente buona, ma, supponiamo di voler cambiare il nome che usiamo per "a" con qualcos'altro, come possiamo fare? La sostituzione delle stringhe non funzionerebbe in tutti i casi (funziona nell'esempio sopra, ma cosa succede se il parametro è stato chiamato 'i' per esempio?) È possibile avere solo la sostituzione del nome parametro, il tempo di esecuzione, senza influire sul espressione semantica?
UPDATE Il @PhilKlein funziona perfettamente, ma richiede quadro 4. Ma se abbiamo bisogno di indirizzare il Framework 3.5 si può utilizzare una classe ExpressionVisitor da Matt Warren, semplicemente modifing da protetto al pubblico il metodo di visita.
Non capisco perché si desidera generare una stringa che rappresenta l'espressione in cui non corrisponde esattamente all'espressione. Perchè vuoi fare questo? Perché * non * si vuole refactoring il codice - perché deve accadere in fase di runtime? –
@KirkWoll Sto usando l'espressione lambda come metadata. Nel contesto in cui viene generata l'espressione, l'argumet può essere diverso da quello che voglio mostrare all'utente in un altro punto del codice. L'intero piccolo progetto è una libreria di convalida degli argomenti che non usa la stringa magica per visualizzare gli errori. –