2011-12-29 1 views
5

Spesso mi ritrovo a scrivereReSharper String.Format scorciatoia

var message = "Hello {0}"; 

e poi tornare e digitare

var message = string.Format("Hello {0}", world); 

Sarebbe bello se, come fossi digitando la stringa, quando ho messo il "alla fine, il resharper capì che c'era un parametro nella stringa e immediatamente circondò la stringa con la stringa. Formatta il metodo e metti il ​​cursore sul primo argomento:

C'è un semplice modo di fare questo? Sto usando ReSharper 6.1

+0

Invece di digitare '{0}', basta usare 'alt + invio' e selezionare l'opzione R # di' Aggiungi nuovo oggetto formato e argomento corretto'. –

risposta

16

Basta digitare in più stupidi:

"Hello " + world 

Alt + InvioInserisci, fatto :

string.Format("Hello {0}", world); 

Ovviamente, questo funziona anche quando il tutto è molto più complesso. So che metterà a nudo le chiamate inutili al .ToString(), e ho il sospetto che si solleva automaticamente eventuali espressioni di formato, come

int i = 42; 
"i = " + i.ToString("X2"); 

Alt + InvioInserisci

string.Format("i = {0:X2}", i); 

Se sei sfortunato/il codice circostante contiene molte cose che attivano i suggerimenti di Resharper (?) Potresti dover posizionare il cursore su uno dei + operatori

+2

Puoi semplicemente digitare la stringa '" Hello "' e poi, mentre il cursore è ancora all'interno delle virgolette, usa R # 'Alt + Enter'>' Enter' che selezionerà l'opzione R # di 'Aggiungi nuovo formato item e argomento corretto ». R # si prenderà cura della posizione del cursore prima e dopo. –

+0

@MetroSmurf: Ah, puoi confermare che è roba R # 6.x? Ho visto che le opzioni con le stringhe di formato sono state migliorate, ma non le ho ancora esercitate molto :) – sehe

+0

sì, funziona con R # 6. Credo che sia stato introdotto anche nella v6. Probabilmente la nuova funzione più usata che ho usato con R # 6 (triste, lo so :) –

1

Puoi quasi fare questo con un frammento di Visual Studio (vale a dire senza ReSharper).

Salvare il seguente file con estensione .snippet.

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <Header> 
     <Title>string format</Title> 
     <Author>Matthew Strawbridge</Author> 
     <Description>Wraps the selected text with string.Format</Description> 
     <SnippetTypes> 
      <SnippetType>SurroundsWith</SnippetType> 
     </SnippetTypes> 
    </Header> 
    <Snippet> 
     <Declarations> 
      <Literal> 
       <ID>variable</ID> 
       <Default>value</Default> 
      </Literal> 
     </Declarations> 
     <Code Language="CSharp"> 
      <![CDATA[string.Format($selected$, $variable$);]]> 
     </Code> 
    </Snippet> 
</CodeSnippet> 

Quindi è possibile caricarlo tramite Strumenti | Gestore di frammenti di codice | Importa.

Una volta che il frammento è disponibile, è possibile digitare

var message = "Hello {0}" 

, ma che avrebbe dovuto selezionare la stringa e quindi premere Ctrl KCtrlS e selezionare il nome snippet applicalo. Questo genera

var message = string.Format("Hello {0}", value); 

con la parte value selezionato per la modifica.

Modifica: C'è anche un Snippet Designer extension che facilita il lavoro con gli snippet.

1

Ecco un sostituto allo snippet di codice di Visual Studio di Matthew. Questo snippet richiede il nome della variabile, ma il valore predefinito è un messaggio che è opzionale e l'unica cosa richiesta è il nome della variabile. HTH

Assomiglia:

var message = string.Format("abc {0}", variable); 

come predefinito (l'abc {0} è stato il testo evidenziato)

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>String Format</Title> 
     <Author>OmegaMan</Author> 
     <Description>Surrounded text gets format</Description> 
     <HelpUrl></HelpUrl> 
     <SnippetTypes /> 
     <Keywords /> 
     <Shortcut>#SF</Shortcut> 
    </Header> 
    <Snippet> 
     <References /> 
     <Imports /> 
     <Declarations> 
     <Literal Editable="true"> 
      <ID>name</ID> 
      <Type></Type> 
      <ToolTip>What the variable name should be.</ToolTip> 
      <Default>message</Default> 
      <Function></Function> 
     </Literal> 
     <Literal Editable="true"> 
      <ID>Vars</ID> 
      <Type></Type> 
      <ToolTip>The target variable for format.</ToolTip> 
      <Default>variable</Default> 
      <Function></Function> 
     </Literal> 
     </Declarations> 
     <Code Language="csharp" Kind="" Delimiter="$"><![CDATA[var $name$ = string.Format($selected$, $Vars$);$end$ ]]></Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets> 
3

spudorato

Ho anche cercato di formulare un approccio per semplificare la creazione di formati di stringhe e ciò che è venuto fuori è lo splicing delle corde a-la PHP:

enter image description here

Questo fa parte di un plug-in ReSharper che si possono trovare here.

2

Ho finito per scrivere un metodo di estensione per le stringhe denominate FormatWith(arg0, ar1...) a causa di questo. Poi ho scoperto che la libreria Humanizer ha fatto la stessa identica cosa. Aggiungi il pacchetto NuGet di Humanizer e ora sarai in grado di scrivere "Heres my formatted string on the {0}st try!".FormatWith(1)" con la speranza di rimbalzare di meno. Se hai ReSharper e ti piace evidenzia i segnaposto corrispondenti con il parametro, installa Humanizer Annotations R# Extension e li recupererai.