web-dev-qa-db-fra.com

Échappe les guillemets dans la chaîne

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

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

Mais cela implique d'ajouter le caractère " à la chaîne. Existe-t-il une fonction C # ou une autre méthode permettant d’échapper aux guillemets afin qu’aucune modification de la chaîne ne soit requise?

138
Mudassir Hasan

Non.

Utilisez les littéraux de chaîne textuels que vous avez ou échappez le " à l’aide de la barre oblique inversée.

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é" en elle. C'est juste une façon de dire à C # que le caractère fait partie de la chaîne et non un terminateur de chaîne.

185
Oded

Vous pouvez utiliser une barre oblique inversée dans les deux sens.

_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 un DEMO .

_"_ fait toujours partie de votre chaîne.

Départ Escape Sequences et String literals de MSDN.

60
Soner Gönül

En C #, vous pouvez utiliser la barre oblique inverse pour insérer des caractères spéciaux dans votre chaîne. Par exemple, pour mettre ", vous devez écrire \". Vous écrivez un grand nombre de caractères à l'aide de la barre oblique inverse: Barre oblique inverse avec un numéro:

  • \ 000 null
  • \ 010 backspace
  • \ 011 onglet horizontal
  • \ 012 nouvelle ligne
  • \ 015 retour chariot
  • \ 032 substitut
  • \ 042 double quote
  • \ 047 devis unique
  • \ 134 backslash
  • \ 140 accent grave

Barre oblique inverse avec un autre caractère

  • \ une cloche (alerte)
  • \ b Retour arrière
  • \ f Formfeed
  • \ n Nouvelle ligne
  • Retour chariot
  • \ t Onglet horizontal
  • \ v Onglet vertical
  • \ 'Guillemet simple
  • \ "Double guillemet
  • \ Barre oblique inverse
  • \? Point d'interrogation littéral
  • \ ooo ASCII caractère en notation octale
  • \ x hh ASCII caractère 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 de 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 correspondant à l'un est\x4e00".
16
Daniel Antokoletz

Vous vous trompez d'échapper.

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

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.

6
SLaks

S'il vous plaît expliquer votre problème. Vous dites:

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

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

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