Escapar aspas duplas em uma string

173

As aspas duplas podem ser escapadas assim:

string test = @"He said to me, ""Hello World"". How are you?";

Mas isso envolve adicionar caracteres "à string. Existe uma função C # ou outro método para escapar aspas duplas, para que nenhuma alteração na cadeia seja necessária?

Mudassir Hasan
fonte
5
você pode usar \ "Hello World \" assim
Pandian
1
O que você realmente quer como resultado? "" Torna-se "em uma string literal.
Roel
Uma pergunta semelhante para C / C ++ (como esse pode ser o principal mecanismo de pesquisa): Como obter aspas duplas em uma literal de cadeia de caracteres?
Peter Mortensen

Respostas:

226

Não.

Use literals literalmente, ou escape da "barra invertida em uso.

string test = "He said to me, \"Hello World\" . How are you?";

A cadeia não mudou em nenhum dos casos - há uma única escapada " nela. Essa é apenas uma maneira de informar ao C # que o caractere faz parte da cadeia e não um terminador de cadeia.

Oded
fonte
81

Você pode usar barra invertida de qualquer maneira;

string str = "He said to me, \"Hello World\". How are you?";

Imprime;

He said to me, "Hello World". How are you?

com exatamente as mesmas impressões;

string str = @"He said to me, ""Hello World"". How are you?";

Aqui está um DEMO.

" ainda faz parte da sua string.

Confira Escape Sequencese String literalsno MSDN.

Soner Gönül
fonte
18

Em C #, você pode usar a barra invertida para colocar caracteres especiais em sua string. Por exemplo, para colocar ", você precisa escrever \". Você escreve muitos caracteres usando a barra invertida: Barra invertida com um número:

  • \ 000 nulo
  • \ 010 backspace
  • \ 011 guia horizontal
  • \ 012 nova linha
  • \ 015 retorno de carro
  • \ 032 substituto
  • \ 042 aspas duplas
  • \ 047 aspas simples
  • \ 134 barra invertida
  • \ 140 sotaque grave

Barra invertida com outro caractere

  • \ a Bell (alerta)
  • \ b Backspace
  • \ f Alimentação de formulário
  • \ n Nova linha
  • retorno de carro
  • guia horizontal
  • \ v guia Vertical
  • \ 'Aspa simples
  • \ "Aspas duplas
  • \ Barra invertida
  • \? Ponto de interrogação literal
  • \ ooo caractere ASCII na notação octal
  • \ x hh caractere ASCII em notação hexadecimal
  • \ x hhhh Caractere Unicode em notação hexadecimal, se essa sequência de escape for usada em uma constante de caracteres largos ou em uma literal de seqüência de caracteres Unicode. Por exemplo, WCHAR f = L '\ x4e00' ou WCHAR b [] = L "O caractere chinês para um é \ x4e00".
Daniel Antokoletz
fonte
6

Você está entendendo errado escapar.

Os "caracteres extras fazem parte da cadeia literal; eles são interpretados pelo compilador como um único " .

O valor real da sua string ainda é He said to me , "Hello World".How are you ?, como você verá se a imprime em tempo de execução.

SLaks
fonte
4

Por favor, explique seu problema. Você diz:

Mas isso envolve adicionar caracteres "à string.

Que problema é esse? Você não pode digitar string foo = "Foo"bar"";, porque isso invocará um erro de compilação. Quanto à parte de adição , em termos de tamanho de sequência que não é verdade:

@"""".Length == "\"".Length == 1
CodeCaster
fonte