38 Stimmen

@(at)-Zeichen in Dateipfad/Zeichenfolge

Mögliches Duplikat:
Was bedeutet das @ vor einer Zeichenkette für .NET?

Ich habe den folgenden Code:

new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)

Was bedeutet die @ Zeichen tun?

104voto

CodesInChaos Punkte 103089

Es hat nichts mit dem Dateipfad zu tun. Es ändert das Escape-Verhalten von Zeichenketten.

In einem String-Literal mit dem Präfix @ die Escape-Sequenzen, die mit \ deaktiviert sind. Dies ist praktisch für Dateipfade, da \ ist der Pfadtrenner, und Sie wollen nicht, dass er eine Escape-Sequenz einleitet.

In einer normalen Zeichenkette müssten Sie die \ in \\ Ihr Beispiel würde also wie folgt aussehen "pdf \\ ". Aber da es mit einem Präfix versehen ist @ ist das einzige Zeichen, das als Escapezeichen verwendet werden muss " (die als "" ) und die \ können einfach erscheinen.

Diese Funktion ist praktisch für Zeichenkettenliterale, die \ wie etwa Dateipfade oder Regexe.

Für Ihr einfaches Beispiel ist der Gewinn nicht so groß, aber stellen Sie sich vor, Sie hätten einen vollständigen Pfad "C:\\ABC\\CDE\\DEF" entonces @"C:\ABC\CDE\DEF" sieht viel schöner aus.

Für reguläre Ausdrücke ist es fast ein Muss. Ein Regex enthält typischerweise mehrere \ und wird oft fast unleserlich, wenn man sie entschlüsseln muss.

29voto

Jon Skeet Punkte 1325502

Es ist ein wortwörtliches String-Wort .

Dadurch kann die Zeichenkette Backslashes und sogar Zeilenumbrüche enthalten, ohne dass diese anders behandelt werden:

string multiLineString = @"First line
second line
third line";

Da Backslashes nicht zum Escapen verwendet werden, muss ein doppeltes Anführungszeichen in die Zeichenkette eingefügt werden, um sie zu verdoppeln:

string withQuote = @"before""after";

Verbatim-String-Literale werden typischerweise für Dateipfade (wie Sie gezeigt haben) und reguläre Ausdrücke verwendet, die beide häufig Backslashes verwenden.

Siehe meine Artikel über Saiten für weitere Informationen.

8voto

GvS Punkte 51365

Damit können Sie den Backslash (\) eingeben, ohne ihn zu escapen:

 var s1 = "C:\\Temp\\MyFileName";
 var s2 = @"C:\Temp\MyFileName";

Beide resultieren in einer Zeichenkette mit demselben Inhalt (und da Zeichenketten interniert zur Kompilierzeit, wahrscheinlich sogar die gleiche String-Referenz).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X