Esta es una pregunta .NET para C # (o posiblemente VB.net), pero estoy tratando de averiguar cuál es la diferencia entre las siguientes declaraciones:
string hello = "hello";
vs.
string hello_alias = @"hello";
Imprimir en la consola no hace ninguna diferencia, las propiedades de longitud son las mismas.
@
.Respuestas:
Marca la cadena como literal literal de la cadena: se ignora cualquier cosa en la cadena que normalmente se interpretaría como una secuencia de escape .
Entonces
"C:\\Users\\Rich"
es lo mismo que@"C:\Users\Rich"
Hay una excepción: se necesita una secuencia de escape para la comilla doble. Para escapar de una comilla doble, debe poner dos comillas dobles seguidas. Por ejemplo,
@""""
evalúa a"
.fuente
{{
si desea usar una llave normal en unastring.Format
llamada.Es una cadena literal literal . Significa que no se aplica el escape. Por ejemplo:
Aquí
verbatim
yregular
tienen los mismos contenidos.También permite contenidos de varias líneas, lo que puede ser muy útil para SQL:
El único escape que es necesario para los literales de cadena textuales es obtener una comilla doble ("), lo que haces al duplicarlo:
fuente
Una '@' también tiene otro significado: ponerla delante de una declaración de variable le permite usar palabras clave reservadas como nombres de variables.
Por ejemplo:
Solo he encontrado uno o dos usos legítimos para esto. Principalmente en ASP.NET MVC cuando quieres hacer algo como esto:
Lo que produciría un enlace HTML como:
De lo contrario, tendría que usar 'Clase', que no es una palabra clave reservada, pero la 'C' mayúscula no sigue los estándares HTML y simplemente no se ve bien.
fuente
Dado que también solicitó explícitamente VB, permítanme agregar que esta sintaxis de cadena literal no existe en VB, solo en C #. Más bien, todas las cadenas son textuales en VB (excepto el hecho de que no pueden contener saltos de línea, a diferencia de las cadenas literales de C #):
Las secuencias de escape no existen en VB (excepto por la duplicación del carácter de comillas, como en las cadenas textuales de C #), lo que hace que algunas cosas sean más complicadas. Por ejemplo, para escribir el siguiente código en VB necesita usar concatenación (o cualquiera de las otras formas de construir una cadena)
En VB esto se escribiría de la siguiente manera:
(
&
es el operador de concatenación de cadenas VB.+
igualmente podría usarse).fuente
"
y"
.String.Format
, lo que permite hacer esto. De hecho, ahora nunca escribiría"x" & Environment.NewLine
, y en su lugar siempre usaríaString.Format("x{0}", Environment.Newline)
etc. Aún así, C # es más conveniente aquí."x" & nl & nl
o"x" + nl + nl
o"x" . $nl . $nl
cualquier día sobre"x\n\n"
. También"x" + bs + bs
terminado"x\\\\"
. Y"x" + q + q
sobre"x\"\""
/"x"""""
. Ahora en cuanto aString.Format
, ese es otro problema no relacionado con la comparación que estamos haciendo anteriormente.http://msdn.microsoft.com/en-us/library/aa691090.aspx
C # admite dos formas de literales de cadena: literales de cadena regulares y literales de cadena literales.
Un literal de cadena regular consta de cero o más caracteres encerrados entre comillas dobles, como en "hola", y puede incluir tanto secuencias de escape simples (como \ t para el carácter de tabulación) como secuencias de escape hexadecimales y Unicode.
Un literal de cadena literal consiste en un carácter @ seguido de un carácter de comillas dobles, cero o más caracteres y un carácter de comillas dobles de cierre. Un ejemplo simple es @ "hola". En un literal de cadena literal, los caracteres entre los delimitadores se interpretan literalmente, la única excepción es una secuencia de escape entre comillas. En particular, las secuencias de escape simples y las secuencias de escape hexadecimales y Unicode no se procesan en literales de cadena literales. Un literal de cadena literal puede abarcar varias líneas.
fuente
Esta es una cadena literal, y cambia las reglas de escape: el único carácter que ahora se escapa es ", se escapó a" ". Esto es especialmente útil para rutas de archivos y expresiones regulares:
etc.
fuente
Copiado de MSDN :
fuente
Poner un
@
frente a una cadena le permite usar caracteres especiales como una barra diagonal inversa o comillas dobles sin tener que usar códigos especiales o caracteres de escape.Entonces puedes escribir:
en vez de:
fuente
La explicación es simple. Para representar la cadena
"string\"
, el compilador necesita"string\\"
porque\
es un carácter de escape. Si usa@"string\"
en su lugar, puede olvidarse\\
.fuente