Esta é uma pergunta do .NET para C # (ou possivelmente VB.net), mas estou tentando descobrir qual é a diferença entre as seguintes declarações:
string hello = "hello";
vs.
string hello_alias = @"hello";
Imprimir no console não faz diferença, as propriedades de comprimento são as mesmas.
@
.Respostas:
Ele marca a string como literal literal - qualquer coisa na string que normalmente seria interpretada como uma sequência de escape é ignorada.
Então
"C:\\Users\\Rich"
é o mesmo que@"C:\Users\Rich"
Há uma exceção: é necessária uma sequência de escape para as aspas duplas. Para escapar de aspas duplas, é necessário colocar duas aspas duplas em uma linha. Por exemplo,
@""""
avalia como"
.fonte
{{
se quiser usar um aparelho comum em umastring.Format
chamada.É uma string literal literal . Isso significa que escapar não é aplicado. Por exemplo:
Aqui
verbatim
eregular
tem o mesmo conteúdo.Ele também permite conteúdo de várias linhas - o que pode ser muito útil para SQL:
O único ponto de escape necessário para literais de string literal é obter aspas duplas ("), que você faz dobrando-a:
fonte
Um '@' também tem outro significado: colocá-lo na frente de uma declaração de variável permite que você use palavras-chave reservadas como nomes de variáveis.
Por exemplo:
Eu encontrei apenas um ou dois usos legítimos para isso. Principalmente no ASP.NET MVC, quando você deseja fazer algo assim:
O que produziria um link HTML como:
Caso contrário, você teria que usar 'Class', que não é uma palavra-chave reservada, mas o 'C' maiúsculo não segue os padrões HTML e simplesmente não parece certo.
fonte
Como você solicitou explicitamente o VB também, deixe-me acrescentar que essa sintaxe de string literal não existe no VB, apenas em C #. Em vez disso, todas as strings são verbatim no VB (exceto pelo fato de que não podem conter quebras de linha, diferentemente das strings verbatim do C #):
As seqüências de escape não existem no VB (exceto pela duplicação do caractere de citação, como nas seqüências de caracteres verbais em C #), o que torna algumas coisas mais complicadas. Por exemplo, para escrever o código a seguir no VB, você precisa usar a concatenação (ou qualquer outra maneira de construir uma string)
No VB, isso seria escrito da seguinte maneira:
(
&
é o operador de concatenação de cadeias de caracteres VB.+
poderia igualmente ser usado.)fonte
"
e"
.String.Format
, o que permite fazer isso. Na verdade, agora eu nunca escreveria"x" & Environment.NewLine
e, em vez disso, sempre usariaString.Format("x{0}", Environment.Newline)
etc. Ainda assim, o C # é mais conveniente aqui."x" & nl & nl
ou"x" + nl + nl
ou"x" . $nl . $nl
qualquer dia mais"x\n\n"
. Também"x" + bs + bs
acabou"x\\\\"
. E"x" + q + q
mais"x\"\""
/"x"""""
. AgoraString.Format
, esse é outro problema não relacionado à comparação que estamos fazendo acima.http://msdn.microsoft.com/en-us/library/aa691090.aspx
O C # suporta duas formas de literais de cadeia: literais de cadeia regulares e literais de cadeia literal.
Um literal de cadeia regular consiste em zero ou mais caracteres entre aspas duplas, como em "olá", e pode incluir seqüências de escape simples (como \ t para o caractere de tabulação) e seqüências de escape hexadecimais e Unicode.
Um literal literal de sequência consiste em um caractere @ seguido por um caractere de aspas duplas, zero ou mais caracteres e um caractere de aspas duplas de fechamento. Um exemplo simples é @ "olá". Em uma string literal literal, os caracteres entre os delimitadores são interpretados literalmente, a única exceção sendo uma sequência de escape de citação. Em particular, sequências de escape simples e seqüências de escape hexadecimais e Unicode não são processadas em literais de string literal. Um literal literal de cadeia de caracteres pode abranger várias linhas.
fonte
Esta é uma string literal e altera as regras de escape - o único caractere que agora é escapado é ", escapou para" ". Isso é especialmente útil para caminhos de arquivos e regex:
etc
fonte
Copiado do MSDN :
fonte
Colocar
@
na frente de uma sequência permite usar caracteres especiais, como uma barra invertida ou aspas duplas, sem precisar usar códigos especiais ou caracteres de escape.Então você pode escrever:
ao invés de:
fonte
A explicação é simples. Para representar a sequência
"string\"
, o compilador precisa"string\\"
porque\
é um caractere de escape. Se você usar@"string\"
, pode esquecer\\
.fonte