Échapper les guillemets dans une chaîne

173

Les guillemets doubles peuvent être échappés comme ceci:

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

Mais cela implique l'ajout de caractère "à la chaîne. Existe-t-il une fonction C # ou une autre méthode pour échapper les guillemets doubles afin qu'aucune modification de chaîne ne soit requise?

Mudassir Hasan
la source
5
vous pouvez utiliser \ "Hello World \" comme ceci
Pandian
1
Que voulez-vous vraiment en conséquence? "" devient "dans une chaîne littérale.
Roel
Une question similaire pour C / C ++ (car cela peut être le premier hit du moteur de recherche): Comment puis-je obtenir des guillemets doubles dans une chaîne littérale?
Peter Mortensen

Réponses:

226

Non.

Utilisez les littéraux de chaîne textuels comme vous l'avez fait ou échappez à la "barre oblique inverse.

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

La chaîne n'a pas changé dans les deux cas - il y a un seul échappé " dedans. C'est juste un moyen de dire à C # que le caractère fait partie de la chaîne et non un terminateur de chaîne.

Oded
la source
81

Vous pouvez utiliser la barre oblique inverse dans les deux cas;

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

Il imprime;

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

qui est exactement la même impression avec;

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

Voici une DEMO .

" fait toujours partie de votre chaîne.

Vérifiez Escape Sequenceset String literalsde MSDN.

Soner Gönül
la source
18

En C #, vous pouvez utiliser la barre oblique inverse pour mettre des caractères spéciaux dans votre chaîne. Par exemple, pour mettre ", vous devez écrire \". Il y a beaucoup de caractères que vous écrivez en utilisant la barre oblique inverse: Barre oblique inverse avec un nombre:

  • \ 000 nul
  • \ 010 retour arrière
  • \ 011 onglet horizontal
  • \ 012 nouvelle ligne
  • \ 015 retour chariot
  • \ 032 substitut
  • \ 042 guillemets doubles
  • \ 047 guillemet simple
  • \ 134 barre oblique inverse
  • \ 140 accent grave

Barre oblique inverse avec un autre caractère

  • \ une cloche (alerte)
  • \ b Retour arrière
  • \ f Formfeed
  • \ n Nouvelle ligne
  • \ r Retour chariot
  • \ t Onglet Horizontal
  • \ v Onglet Vertical
  • \ 'Guillemets simples
  • \ "Guillemets doubles
  • \ Barre oblique inverse
  • \? Point d'interrogation littéral
  • \ ooo caractère ASCII en notation octale
  • \ x hh Caractère ASCII en notation hexadécimale
  • \ x hhhh Caractère Unicode en notation hexadécimale si cette séquence d'échappement est utilisée dans une constante à caractère large ou un littéral de chaîne Unicode. Par exemple, WCHAR f = L '\ x4e00' ou WCHAR b [] = L "Le caractère chinois pour un est \ x4e00".
Daniel Antokoletz
la source
6

Vous ne comprenez pas vous échapper.

Les "caractères supplémentaires font partie du littéral de chaîne; ils sont interprétés par le compilateur comme un seul " .

La valeur réelle de votre chaîne est toujours He said to me , "Hello World".How are you ?, comme vous le verrez si vous l'imprimez au moment de l'exécution.

SLaks
la source
4

Veuillez expliquer votre problème. Vous dites:

Mais cela implique l'ajout de caractère "à la chaîne.

De quel problème s'agit-il? Vous ne pouvez pas taper string foo = "Foo"bar"";, car cela provoquera une erreur de compilation. Quant à la partie d' ajout , en termes de taille de chaîne, ce n'est pas vrai:

@"""".Length == "\"".Length == 1
CodeCaster
la source