292 votes

Échapper les guillemets doubles dans une chaîne de caractères

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

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

Mais cela implique d'ajouter du caractère " à la chaîne de caractères. Existe-t-il une fonction C# ou une autre méthode permettant d'échapper aux guillemets doubles afin de ne pas avoir à modifier la chaîne de caractères ?

1 votes

Que voulez-vous vraiment comme résultat ? "" devient " dans une chaîne littérale.

0 votes

Une question similaire pour C/C++ (car il s'agit peut-être de la première réponse du moteur de recherche) : Comment obtenir des guillemets doubles dans un littéral de chaîne de caractères ?

351voto

Oded Points 271275

Non.

Soit vous utilisez des chaînes littérales textuelles comme vous l'avez fait, soit vous échappez les caractères " en utilisant la barre oblique inversée.

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

La chaîne de caractères n'a pas changé dans les deux cas - il y a un seul s'est échappé " en elle. Il s'agit simplement d'un moyen d'indiquer à C# que le caractère fait partie de la chaîne et n'est pas un terminateur de chaîne.

151voto

Soner Gönül Points 35739

Vous pouvez utiliser la barre oblique inversée 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 le même que celui qui est imprimé avec :

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

Voici un DEMO .

" fait toujours partie de votre chaîne.

Vous pouvez consulter le site de Jon Skeet Les chaînes de caractères en C# et .NET pour plus d'informations.

26voto

Daniel Antokoletz Points 282

En C#, vous pouvez utiliser la barre oblique inverse pour ajouter des caractères spéciaux à votre chaîne. Par exemple, pour mettre " vous devez écrire \" . Il y a beaucoup de caractères que l'on peut écrire en utilisant la barre oblique inversée :

Backslash avec d'autres caractères

  \0 nul character
  \a Bell (alert)
  \b Backspace
  \f Formfeed
  \n New line
  \r Carriage return
  \t Horizontal tab
  \v Vertical tab
  \' Single quotation mark
  \" Double quotation mark
  \\ Backslash

Toute substitution de caractères par des chiffres :

  \xh to \xhhhh, or \uhhhh - Unicode character in hexadecimal notation (\x has variable digits, \u has 4 digits)
  \Uhhhhhhhh - Unicode surrogate pair (8 hex digits, 2 characters)

18voto

N Djel Okoye Points 421

Une autre chose qui vaut la peine d'être mentionnée à partir de C# 6 est que les chaînes interpolées peuvent être utilisées avec @ .

Exemple :

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

Ou

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

Vérifier le code en cours d'exécution aquí !

Voir la référence à l'interpolation aquí !

0 votes

Pour quelle version de C# est-ce valable ? Pouvez-vous fournir quelques références ? Veuillez répondre par éditer votre réponse pas ici dans les commentaires ( sans "Editer :", "Mettre à jour :", ou similaire - la réponse doit apparaître comme si elle avait été écrite aujourd'hui).

2 votes

Notez que bouth $@"" y @$"" sont valides.

12voto

dhughes Points 137

2022 UPDATE : Auparavant, la réponse aurait été "non". Cependant, C#11 introduit une nouvelle fonctionnalité appelée "raw string literals". Pour citer la documentation de Microsoft :

À partir de C# 11, vous pouvez utiliser des littéraux de chaîne bruts pour créer plus facilement des chaînes à plusieurs lignes ou utiliser des caractères nécessitant des séquences d'échappement. Les littéraux de chaîne bruts suppriment la nécessité d'utiliser des séquences d'échappement. Vous pouvez écrire la chaîne, y compris le formatage de l'espace blanc, comme vous voulez qu'elle apparaisse en sortie."

SOURCE : https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#raw-string-literals

EXEMPLE : En reprenant l'exemple original, vous pourriez donc faire ceci (notez que les chaînes de caractères brutes commencent toujours par trois guillemets ou plus) :

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

1 votes

Il serait bon d'ajouter un extrait de code pour montrer comment une chaîne littérale brute représenterait la question He said to me, "Hello World". How are you? .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X