769 votes

Quel est le @ devant une chaîne de caractères en C#?

C'est un .NET question pour C# (ou peut-être VB.net), mais je suis à essayer de comprendre quelle est la différence entre les déclarations suivantes:

string hello = "hello";

vs

string hello_alias = @"hello";

L'impression sur la console ne fait pas de différence, la longueur propriétés sont les mêmes.

975voto

Richard Everett Points 18318

Il marque la chaîne en tant que mot à mot littéral de chaîne - quoi que ce soit dans la chaîne qui devrait normalement être interprété comme une séquence d'échappement est ignoré.

Donc, "C:\\Users\\Rich" est le même que @"C:\Users\Rich"

304voto

Jon Skeet Points 692016

C'est un verbatim littéral de chaîne. Cela signifie que l'évitement n'est pas appliquée. Par exemple:

string verbatim = @"foo\bar";
string regular = "foo\\bar";

Ici, verbatim et regular ont le même contenu.

Il permet également multi-ligne contenu - qui peut être très pratique pour SQL:

    string select = @"
SELECT Foo
FROM Bar
WHERE Name='Baz'";

(Non pas que vous devez disposer de SQL dans le code, très souvent, bien sûr :)

Le bit d'échapper à ce qui est nécessaire pour verbatim les littéraux de chaîne est d'obtenir un double quote (") en le doublant:

string verbatim = @"He said, ""Would you like some coffee?"" and left.";
string regular = "He said, \"Would you like some coffee?\" and left.";

75voto

JulianR Points 7257

Un '@' a une autre signification: le mettre en face d'une déclaration de variable permet d'utiliser des mots clés réservés comme noms de variable.

Par exemple:

string @class = "something";
int @object = 1;

J'ai trouvé une ou deux utilisations légitimes de ce. Principalement dans ASP.NET MVC lorsque vous voulez faire quelque chose comme ceci:

<%= Html.ActionLink("Text", "Action", "Controller", null, new { @class = "some_css_class" })%>

Qui aurait un lien HTML, comme:

<a href="http://stackoverflow.com/Controller/Action" class="some_css_class">Text</a>

Sinon, vous devrez utiliser "Classe", ce qui n'est pas un mot clé réservé, mais la majuscule de " C " ne suivent pas les normes HTML et n'a tout simplement pas regarder à droite.

19voto

Konrad Rudolph Points 231505

Depuis que vous avez explicitement demandé pour VB ainsi, permettez-moi d'ajouter que ce verbatim syntaxe de la chaîne n'existe pas en VB, uniquement en C#. Plutôt, toutes les chaînes sont textuellement dans VB (sauf pour le fait qu'ils ne peuvent pas contenir des sauts de ligne, à la différence de C# verbatim de chaînes de caractères):

Dim path = "C:\My\Path"
Dim message = "She said, ""Hello, beautiful world."""

Les séquences d'échappement n'existent pas en VB (sauf pour le doublement de la citation de caractères, comme en C# verbatim de chaînes de caractères) qui fait un peu de choses sont plus compliquées. Par exemple, pour écrire le code suivant dans visual basic, vous devez utiliser la concaténation (ou l'un des autres façons de construire une chaîne de caractères)

string x = "Foo\nbar";

En VB ce serait écrit comme suit:

Dim x = "Foo" & Environment.NewLine & "bar"

(& est le VB opérateur de concaténation de chaîne. + pourrait également être utilisé.)

12voto

Ed Guiness Points 21866

http://msdn.microsoft.com/en-us/library/aa691090.aspx

C# supporte deux formes de littéraux de chaîne: régulier des littéraux de chaîne et verbatim les littéraux de chaîne.

Régulièrement un littéral de chaîne se compose de zéro ou plusieurs caractères entre guillemets, comme dans "bonjour", et peut inclure à la fois simple des séquences d'échappement (comme \t pour une tabulation) et hexadécimal et les séquences d'échappement Unicode.

Un verbatim littéral de chaîne se compose d'un caractère @ suivi par un guillemet, zéro ou plusieurs caractères, et une fermeture à double caractère de devis. Un exemple simple est @"bonjour". Dans un mot à mot littéral de chaîne, les caractères entre les délimiteurs sont interprétés mot à mot, à l'exception d'une quote-des séquences d'échappement. En particulier, simples séquences d'échappement et hexadécimal et les séquences d'échappement Unicode ne sont pas traitées dans le verbatim les littéraux de chaîne. Un verbatim littéral de chaîne peut s'étendre sur plusieurs lignes.

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