Duplicata possible:
Quel est le @ devant une chaîne pour .NET?
J'ai le code suivant:
new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)
Que fait le @
signe faire?
Cela n'a rien à voir avec le chemin de fichier. Il modifie le comportement d'échappement des chaînes.
Dans une chaîne littérale préfixée par @
les séquences d'échappement commençant par \
sont désactivés. C'est pratique pour les chemins de fichiers puisque \
est le séparateur de chemin et vous ne voulez pas qu'il démarre une séquence d'échappement.
Dans une chaîne normale, vous devez vous échapper \
en \\
pour que votre exemple ressemble à ce "pdf \\". Mais comme il est préfixé par @
le seul caractère à échapper est "
(échappé par ""
) et le \
peut simplement apparaître.
Cette fonctionnalité est pratique pour les chaînes de caractères contenant \
tels que les chemins de fichiers ou les expressions rationnelles.
Pour votre exemple simple, le gain n'est pas si grand, mais l'image que vous avez un chemin complet "C:\\ABC\\CDE\\DEF"
puis @"C:\ABC\CDE\DEF"
semble beaucoup plus agréable.
Pour les expressions régulières, c'est presque un must. Une expression régulière contient généralement plusieurs \
échappe déjà à d'autres personnages et devient souvent presque illisible si vous avez besoin de les échapper.
C'est un littéral de chaîne textuelle .
Cela permet à la chaîne de contenir des barres obliques inverses et même des sauts de ligne sans qu'ils soient traités différemment:
string multiLineString = @"First line
second line
third line";
Comme les barres obliques inverses ne sont pas utilisées pour l'échappement, l'insertion d'un guillemet double dans la chaîne nécessite qu'il soit doublé:
string withQuote = @"before""after";
Les littéraux de chaîne verbbatim sont généralement utilisés pour les chemins de fichiers (comme vous l'avez montré) et les expressions régulières, qui utilisent fréquemment des barres obliques inverses.
Voir mon article sur les chaînes pour plus d'informations.
Il vous permet de saisir la barre oblique inverse (\) sans y échapper:
var s1 = "C:\\Temp\\MyFileName";
var s2 = @"C:\Temp\MyFileName";
Les deux résultent en une chaîne avec le même contenu (et puisque les chaînes sont internées au moment de la compilation, probablement même la même référence de chaîne).