2011-12-29 22 views
5

A menudo me encuentro escribiendoReSharper acceso directo string.format

var message = "Hello {0}"; 

y luego volver y escribir en

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

Sería bueno si lo estuviera escribiendo la cadena, cuando pongo el "al final, el reafilador descubrió que había un parámetro en la cadena e inmediatamente rodeó la cadena con la cadena. Forme el método y coloque el cursor en el primer argumento.

¿Existe una relación directa? forma de hacer esto? Estoy usando ReSharper 6.1

+0

En lugar de escribir '{0}', simplemente use 'alt + enter' y seleccione la opción R # de' Agregar nuevo elemento de formato y argumento apropiado'. –

Respuesta

16

Sólo tienes que escribir en más tonto:

"Hello " + world 

Alt + EnterIntroduzca, hecho :

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

Obviamente, esto también funciona cuando todo es mucho más complejo. Sé que va a despojar a las llamadas inútiles a .ToString(), y sospecho que se levantará automáticamente las expresiones de formato, como

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

Alt + EnterIntroduzca

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

Si no tiene suerte/el código que lo rodea contiene muchas cosas que activan las sugerencias de Resharper (?) Usted podría tener que coloque el cursor sobre uno de los operadores +

+2

Puede simplemente escribir la cadena '" Hello "' y luego, mientras el cursor aún está dentro de las comillas, use R # 'Alt + Enter'>' Enter' que seleccionará la opción R # de 'Agregar nuevo elemento de formato y argumento apropiado'. R # se ocupará de la ubicación del cursor antes y después. –

+0

@MetroSmurf: Ah, ¿pueden confirmar que es R # 6.x cosas? He visto que las opciones con cadenas de formato se han mejorado, pero todavía no las he ejercitado demasiado :) – sehe

+0

sí, esto funciona con R # 6. Creo que también se introdujo en v6. Probablemente la característica nueva más utilizada que he utilizado con R # 6 (triste, lo sé :) –

1

Usted puede casi hacer esto con un fragmento de Visual Studio (es decir, sin ReSharper).

Guarde lo siguiente como un archivo con una extensión .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> 

A continuación, puede cargar a través de Herramientas | Administrador de fragmentos de código | Importe.

Una vez que el fragmento está disponible, puede escribir

var message = "Hello {0}" 

pero usted tiene que seleccionar la cadena y luego presione Ctrl KCtrlS y seleccione el nombre de fragmento apliquelo. Esto generaría

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

con la parte value seleccionado para la edición.

Editar: También hay un Snippet Designer extension que facilita el trabajo con fragmentos.

1

Aquí hay una alternativa al fragmento de código de Visual Studio de Matthew. Este fragmento solicita el nombre de la variable, pero el valor predeterminado es el mensaje que es opcional y lo único que se requiere es el nombre de la variable. HTH

se parece a:

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

como predeterminado (el abc {0} fue el texto resaltado)

<?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

Enchufe desvergonzado

También he probado a formular un enfoque para facilitar la creación del formato de cadena, y lo que se me ocurrió es empalme de cuerdas a-la PHP:

enter image description here

Esto es parte de un plug-in ReSharper que se puede encontrar here.

2

Terminé escribiendo un método de extensión para cadenas llamado FormatWith(arg0, ar1...) debido a esto. Luego descubrí que la biblioteca Humanizer hizo exactamente lo mismo. Agregue el paquete Humanizer NuGet y ahora podrá escribir "Heres my formatted string on the {0}st try!".FormatWith(1)" con la esperanza de que rebote menos. Si tiene ReSharper y muestra los marcadores de posición coincidentes con el parámetro, instale el Humanizer Annotations R# Extension y los recuperará.

Cuestiones relacionadas