Ce sujet est traité dans section 2.4.4.5 de la spécification C# :
2.4.4.5 Littéraux de chaîne de caractères
C# prend en charge deux formes de chaînes de caractères : les chaînes de caractères normales et les chaînes de caractères verbatim.
Un littéral de chaîne régulière est constitué de zéro ou plusieurs caractères entre guillemets, comme dans "hello", et peut inclure à la fois des séquences d'échappement simples (telles que \t pour le caractère tabulation) et les séquences d'échappement hexadécimales et Unicode.
Une chaîne littérale verbatim est constituée d'un caractère @ suivi d'un caractère double guillemet, de zéro ou plusieurs caractères et d'un caractère double guillemet de fermeture. Un exemple simple est @"hello". Dans une chaîne de caractères verbatim, les caractères entre les délimiteurs sont interprétés verbatim, la seule exception étant une séquence d'échappement entre guillemets. En particulier, les séquences d'échappement simples et les séquences d'échappement hexadécimales et Unicode ne sont pas traitées dans les chaînes de caractères verbatim. Une chaîne de caractères verbatim peut s'étendre sur plusieurs lignes.
En d'autres termes, le seul caractère spécial dans un @"littéral de chaîne verbatim" est le caractère guillemet. Si vous souhaitez écrire une chaîne verbatim contenant un double guillemet, vous devez écrire deux doubles guillemets. Tous les autres caractères sont interprétés littéralement.
Vous pouvez même avoir des nouvelles lignes littérales dans une chaîne littérale verbatim. Dans une chaîne de caractères normale, vous ne pouvez pas avoir de nouvelles lignes littérales. Au lieu de cela, vous devez utiliser par exemple "\n"
.
Les chaînes littérales verbatim sont souvent utiles pour intégrer des noms de fichiers et des expressions régulières dans le code source, car les barres obliques inverses dans ces types de chaînes sont courantes et devraient être échappées si une chaîne littérale régulière était utilisée.
Il n'y a pas de différence au moment de l'exécution entre les chaînes créées à partir de chaînes littérales normales et les chaînes créées à partir de chaînes littérales verbatim - elles sont toutes deux de type System.String
.
4 votes
Je n'ai jamais vu cette suggestion de ReSharper. Pouvez-vous donner un exemple où il suggère cela ?
4 votes
Je viens de l'avoir. La première suggestion était de le déplacer vers une ressource, mais la seconde était d'en faire une chaîne de caractères verbatim : MessageBox.Show("Un ornithorynque doit être caressé avant de pouvoir travailler.") ;
1 votes
J'en ai encore tout le temps. C'est généralement l'un des avertissements de resharper que vous voulez désactiver, parce qu'il suggère de faire des chaînes verbatim sans aucune raison.
1 votes
Si vous aimez ma suggestion de fonctionnalité pour l'EDI Visual Studio, veuillez voter pour ici : developercommunity.visualstudio.com/idea/602807/