2009-11-17 17 views
18

Recientemente descubrí que puedo escribir en un " escribiendo dos "ex @"abc""def". Encuentro el @ string literal útil. ¿Pero cómo escribo en una pestaña o nueva línea? ¿Es" "el único truco disponible? Intenté buscar msdn pero no pude encontrarlo.C# @ "" ¿cómo puedo insertar una pestaña?

Respuesta

25

Cuando está utilizando el modificador @, está utilizando algo llamado literal de cadena literal .

Lo que esto significa es que todo lo que coloque entre las comillas de apertura y cierre se usará en la cadena.

Esto incluye Carraige Retorno, Avance de línea, etc. Tab y

Respuesta corta: Sólo presiona el tabulador.

Una advertencia, sin embargo. Su IDE puede decidir insertar espacios en lugar de un carácter de tabulación, por lo que es mejor que utilice la concatenación.

+0

d'oh, presione la tecla de tabulación. Que tonto de mi parte. Prestaré atención al IDE. –

+6

Tenga en cuenta que es posible que las pestañas no sobrevivan a algunas herramientas que restringen su código. Usar pestañas literales en literales es raro y esa podría ser la suposición de quien escribió lo que también los cambia ciegamente a espacios :-) – Joey

8

esa secuencia de escape cita ("") es el único "escape" que funciona en verbatim string literals. Todos los demás se escapa única trabajo en los literales de cadena regulares.

Como solución se puede usar algo feo como este:

string.Format(@"Foo{0}Bar", "\t"); 

o incluye un carácter de tabulación real en la cadena. Eso también hay que trabajar con los literales de cadena, pero regulares espacios en blanco, especialmente las pestañas, por lo general no sobrevive a diferentes editores de texto, así :-)

Para saltos de línea es posiblemente mucho más fácil:

@"Foo 
Bar"; 
+0

Así es como lo haría, siempre utilizo cadenas de formato para cualquier lugar que combine cualquier texto. –

+0

Para concatenar cadenas hay opciones más bonitas, aunque :-). Me olvidé por completo de 'string.Concat' (que también se usa entre bastidores por el operador' + ') – Joey

-2

Uso '\\ t 'para escapar de la primera barra invertida, entonces se interpretará como una pestaña. Perdón por la confusión ... este sitio escapó a la primera barra ... realmente al editar esto hay tres barras ...

15

Ninguna de las secuencias de escape normales funciona en literales literales literales (¡ese es el punto!). Si quieres una pestaña de allí, ya sea que usted tiene que poner el carácter real de tabulación en, o utilizar concatenación de cadenas:

string x = @"some\stuff" + "\t" + @"some more stuff"; 

¿Qué estás usando una cadena literal para textualmente en el primer lugar? Puede haber una mejor forma de manejarlo.

+0

¿Por qué demonios pensé en' string.Format' y * not * de concatenación de cadenas normal? Ay. – Joey

+1

¿El conflicto de adición de cadena no funciona bien con la internación? –

+0

Quizás porque parece haber un sesgo hacia los ejemplos de estilo de formato para C#: en libros y en la web. Personalmente, prefiero WriteLine ("Name =" + nameVar); para aplicaciones de formateo simples. –

1

Al usar la sintaxis @, todos los caracteres que se escapan están deshabilitados. Entonces, para obtener una pestaña o una nueva línea, deberá insertar una TAB literal o una línea nueva. Es fácil: solo presiona el botón TAB o ENTER en tu teclado. Tenga en cuenta que es posible que necesite cambiar el comportamiento de TAB en Visual Studio si está configurado para ingresar espacios en lugar de caracteres TAB literales.

+0

De hecho. Me pregunto en qué idioma lo confundí. Fijo. –

1

El @ antes de una cadena asume que tienes hay escape, por lo que necesita para concatenar:

string value = @"Hello ""big""" +"\t"+ @"world \\\\\"; 

Así, en otras palabras, sí "" es el único truco disponible.

+1

Recuerde siempre poner el @ delante de la segunda cuerda también. @ "Hola, grande" + "\ t" + @ "mundo"; –

1

Si está empezando a necesitar caracteres "especiales" en su cadena, entonces quizás debería usar una cadena normal "" y escapándolos usando \ en lugar de usar @ "".

¿Qué tipo de datos está almacenando en la cadena? ¿Qué razón tienes para necesitarlo en un @ ""?

2

Una vez que comience una cadena con @ se puede poner nada en el medio, también pestañas o saltos de línea:

string test = @"test 

bla 

bjkl"; 

la cadena anterior contendrá las 4 nuevas líneas.

0

Simplemente escriba una pestaña o una nueva línea en su cadena. @ "" literales de cadena reconocen cada carácter tal como está escrito en el archivo de código. Por el contrario, las secuencias de escape no funcionan.

0

No estoy seguro de que escriba una pestaña porque su editor puede insertar algunos espacios. Usar \ t es la mejor opción.

0

La forma de hacer esto correctest:

string str = string.Format(
    CultureInfo.CurrentCulture, // or InvariantCulture 
    @"abc{0}cde", 
    "\t"); 

y

string str = string.Format(
    CultureInfo.CurrentCulture, // or InvariantCulture 
    @"abc{0}cde", 
    Environment.NewLine); 

que podría tener más de un aspecto de {0} en la cadena.

Cuestiones relacionadas