2011-02-02 20 views
61

Duplicar posibles:
What's the @ in front of a string for .NET?C# '@' antes de una cadena

encontré esto en un libro de C# estudio

DirectoryInfo dir = new DirectoryInfo(key.Key.ToString() + @":\"); 

El libro, sin embargo no explicó lo el símbolo '@' era para. Traté de buscar MSDN C# Operators pero no aparece en la lista. ¿Puedo adivinar que permite al desarrollador no tener que escapar de un '\' o permite que no tenga ninguna secuencia de escape?

¿Para qué sirve esto y por qué debería usar @":\" en lugar de ":\\"?

Gracias por la ayuda

Editar: Ver el comentario a continuación para una pregunta similar

Respuesta

107

Significa interpretar la cadena literal (es decir, no se puede escapar ningún carácter dentro de la cadena si se utiliza el @ prefijo). Mejora la legibilidad en los casos en que se puede utilizar.

Por ejemplo, si estuviera trabajando con una ruta de acceso UNC, esto:

@"\\servername\share\folder" 

es mejor que esto:

"\\\\servername\\share\\folder" 
+8

Bueno, puede escapar "al duplicarlos, es decir,' cadena S = @ "" ""; Consola.Escribir ("[{0}]", S); 'escribe' [""] ' –

+0

@Binary: verdadero :-) –

+0

@Mark Entonces, ¿cualquier secuencia de escape en la cadena se ignoraría y trataría en un texto literal? – Daniel

1

Para qué es esto y por qué debería utilizar @" :\" en lugar de ":\"?

Porque cuando tienes un aguijón largo con muchos \ no necesitas escapar de todos.

13

Prefijar la cadena con una @ indica que se debe tratar como un literal, es decir, sin escape.

Por ejemplo, si la cadena contiene una ruta que normalmente podría hacer esto:

string path = "c:\\mypath\\to\\myfile.txt"; 

El @ le permite hacer esto:

string path = @"c:\mypath\to\myfile.txt"; 

Aviso la falta de barras dobles (escape)

51

También significa que puede usar palabras reservadas como nombres de variables

que usted quiere una clase clase llamada, ya que la clase es una palabra reservada, en su lugar puede llamar a la clase de la clase:

IList<Student> @class = new List<Student>(); 
+2

Eso es genial - No sabía que pudieras hacer eso. Gracias – Daniel

6

Como nota al margen, también hay que tener en cuenta que "escapar" medios "por medio de la barra diagonal inversa como indicador de caracteres especiales ". Puede poner un final de línea en una cadena haciendo eso, por ejemplo:

String foo = "Hello\ 

There"; 
+0

+1 Siempre pensé que la nueva línea era exclusivamente para @ "... style –

Cuestiones relacionadas