Il s'agit d'une question .NET pour C # (ou peut-être VB.net), mais j'essaie de comprendre quelle est la différence entre les déclarations suivantes:
string hello = "hello";
contre.
string hello_alias = @"hello";
L'impression sur la console ne fait aucune différence, les propriétés de longueur sont les mêmes.
@
.Réponses:
Il marque la chaîne comme un littéral de chaîne textuel - tout élément de la chaîne qui serait normalement interprété comme une séquence d'échappement est ignoré.
C'est
"C:\\Users\\Rich"
la même chose que@"C:\Users\Rich"
Il y a une exception: une séquence d'échappement est nécessaire pour le guillemet double. Pour échapper à un guillemet double, vous devez mettre deux guillemets consécutifs. Par exemple,
@""""
évalue à"
.la source
{{
si vous souhaitez utiliser une accolade régulière dans unstring.Format
appel.C'est un littéral de chaîne textuel . Cela signifie que l'échappement n'est pas appliqué. Par exemple:
Ici
verbatim
etregular
ont le même contenu.Il permet également un contenu multi-lignes - ce qui peut être très pratique pour SQL:
Le seul élément d'échappement nécessaire pour les littéraux de chaîne textuels est d'obtenir un guillemet double (") que vous faites en le doublant:
la source
Un «@» a également une autre signification: le placer devant une déclaration de variable vous permet d'utiliser des mots clés réservés comme noms de variable.
Par exemple:
Je n'ai trouvé qu'une ou deux utilisations légitimes pour cela. Principalement dans ASP.NET MVC lorsque vous voulez faire quelque chose comme ceci:
Ce qui produirait un lien HTML comme:
Sinon, vous devrez utiliser «Classe», qui n'est pas un mot clé réservé, mais le «C» majuscule ne suit pas les normes HTML et ne semble tout simplement pas correct.
la source
Puisque vous avez explicitement demandé VB également, permettez-moi d'ajouter que cette syntaxe de chaîne textuelle n'existe pas en VB, uniquement en C #. Au contraire, toutes les chaînes sont textuelles en VB (sauf qu'elles ne peuvent pas contenir de sauts de ligne, contrairement aux chaînes textuelles C #):
Les séquences d'échappement n'existent pas en VB (à l'exception du doublement du caractère de citation, comme dans les chaînes textuelles C #), ce qui complique certaines choses. Par exemple, pour écrire le code suivant en VB, vous devez utiliser la concaténation (ou l'une des autres façons de construire une chaîne)
En VB, cela serait écrit comme suit:
(
&
est l'opérateur de concaténation de chaînes VB.+
pourrait également être utilisé.)la source
"
et"
.String.Format
, ce qui permet de le faire. En fait, je n'écrirais plus jamais"x" & Environment.NewLine
, et j'utiliserais toujoursString.Format("x{0}", Environment.Newline)
etc. etc. Pourtant, C # est plus pratique ici."x" & nl & nl
ou"x" + nl + nl
ou"x" . $nl . $nl
n'importe quel jour"x\n\n"
. Aussi"x" + bs + bs
terminé"x\\\\"
. Et"x" + q + q
plus"x\"\""
/"x"""""
. MaintenantString.Format
, c'est un autre problème sans rapport avec la comparaison que nous faisons ci-dessus.http://msdn.microsoft.com/en-us/library/aa691090.aspx
C # prend en charge deux formes de littéraux de chaîne: les littéraux de chaîne standard et les littéraux de chaîne textuels.
Un littéral de chaîne régulière se compose de zéro ou plusieurs caractères entre guillemets, comme dans "bonjour", et peut inclure à la fois des séquences d'échappement simples (telles que \ t pour le caractère de tabulation) et des séquences d'échappement hexadécimales et Unicode.
Un littéral de chaîne textuelle se compose d'un caractère @ suivi d'un caractère guillemet double, de zéro ou plusieurs caractères et d'un caractère guillemet double de fermeture. Un exemple simple est @ "bonjour". Dans un littéral de chaîne textuel, les caractères entre les délimiteurs sont interprétés textuellement, la seule exception étant une séquence d'échappement-guillemet. 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 littéraux de chaîne textuels. Un littéral de chaîne textuelle peut s'étendre sur plusieurs lignes.
la source
Ceci est une chaîne textuelle, et modifie les règles d'échappement - le seul caractère qui est maintenant échappé est ", échappé à" ". Ceci est particulièrement utile pour les chemins de fichier et l'expression régulière:
etc
la source
Copié à partir de MSDN :
la source
Mettre un
@
devant une chaîne vous permet d'utiliser des caractères spéciaux tels qu'une barre oblique inversée ou des guillemets doubles sans avoir à utiliser de codes spéciaux ou de caractères d'échappement.Vous pouvez donc écrire:
au lieu de:
la source
L'explication est simple. Pour représenter la chaîne
"string\"
, le compilateur a besoin"string\\"
car\
est un caractère d'échappement. Si vous utilisez à la@"string\"
place, vous pouvez oublier\\
.la source