2012-12-31 11 views
10

Abbiamo un metodo di controllo di integritàReSharper trovare modello e sostituire - come inserire stringhe

void IsNotNull<T>(T obj){...} 

invocazione

IsNotNull(obj); 

voglio sostituire questo per invocare l'altro overload che accetta un secondo parametro di tipo stringa (messaggio)

void IsNotNull<T>(T obj, string message){...} 

quindi voglio cambiare l'invocazione come

IsNotNull(obj, "obj is null"); 

Sto cercando di ottenere questo risultato utilizzando il modello di ricerca del ricercatore e la sostituzione.

Quindi il mio modello ritrovamento è: IsNotNull($args$) - Questo funziona bene e trova il metodo chiama

Sostituire modello: IsNotNull($args$, "$args$ is null") - Questo non fa nulla

Ho provato anche questo IsNotNull($args$, """" + $args$ + """")

- -Edited-- La casella di suggerimento che mostra la dicitura corretta (sia per argomento che per identificatore), ma una volta applicata è diversa. Sto usando ReSharper 6

enter image description here

Dopo aver applicato il suggerimento ottengo questo enter image description here

Quando clicco Edit Pattern enter image description here

+1

Cosa R # stai usando? Ho provato la versione proposta da @hmemcpy e tutto ha funzionato bene. 'R # 7.1' –

risposta

7

Qual è il suo parametro $args$ definito come nella Ricerca e sostituzione? Se fate che sia Identifier, allora si sostituisce dovrebbe funzionare:

Ricerca: IsNotNull($args$) - dove $args$ è un Identifier
Sostituire: IsNotNull($args$, "$args$ is null")

Si dovrebbe avere il risultato desiderato, vale a dire IsNotNull(obj, "obj is null") .

+0

grazie, purtroppo non ha risolto il problema che stampa ancora IsNotNull (obj, obj). Voglio il mio secondo param racchiuso tra virgolette –

+0

"dove $ args $ è un identificatore" è la parte importante. –

1

Si può considerare cercando di utilizzare questo schema:

IsNotNull($args$, string.Format("{0} is null", $args$)) 

Funziona perfettamente per me con ReSharper 7.1.

Sembra che R # non voglia valutare l'espressione di argomento all'interno di stringhe letterali normalmente. Dato il vostro modello

IsNotNull($args$, "$args$ is null") 

Ha sostituito dal IsNotNull(5);IsNotNull(5, 5); che è strano

+0

In questo caso ho bisogno del nome degli args, non del valore di args come args.ToString(). Fondamentalmente ho bisogno di racchiudere i miei argomenti con virgolette doppie –

+1

Vedo, mi dispiace per equivoco, perché ho usato per tracciare i valori dei parametri, non il nome degli argomenti. Proverò a vedere se riesco a modificare una soluzione per soddisfare le tue necessità –

1

Il metodo più semplice sarebbe quella di riscrivere il metodo originale in questo modo:

void IsNotNull<T>(T obj){ 
    IsNotNull(obj, "obj is null"); 
} 

Quindi fare clic sulla firma del metodo, e scegli Refactor-> Metodo Inline (Ctrl + R, Ctrl + I). Se è necessario mantenere la firma del metodo originale, è possibile oppure è possibile selezionare la casella "Rimuovi dichiarazione del metodo inline".

MODIFICA: sembra che la soluzione di hmemcpy funzioni in 7.1, quindi suggerirei un aggiornamento. Se ciò non è possibile, tuttavia, prova la seguente espressione regolare find-and-replace in Visual Studio.

Verificare che "Usa le espressioni regolari" sia selezionato e "Cerca in:" deve essere "Soluzione completa".

+0

Grazie per la risposta, ma il tuo suggerimento non risolve il mio problema nel contesto di Resharper-Replacement-Pattern o in generale. Voglio che venga mostrato un messaggio specifico. Non solo 'obj is null', nella mia domanda era solo un esempio –

+0

@NasmiSabeer: Nessun problema. In realtà, ho appena capito e sto aggiornando la mia soluzione. –

+0

@NasmiSabeer: In realtà, sembra che la soluzione di hmemcpy sia corretta. La chiave è che $ args $ deve essere definito come un identificatore nella finestra di dialogo Cerca con pattern e non in un argomento. Non sono sicuro del motivo per cui hanno la limitazione di quota per i segnaposti degli argomenti, ma i segnaposto identificatori sembrano funzionare correttamente. –

Problemi correlati