Laden...
FAQ

[FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen

Erstellt von herbivore vor 16 Jahren Letzter Beitrag vor 16 Jahren 40.645 Views
herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 16 Jahren
[FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen

Hallo Community,

der Vorteil der @-Schreibweise von String-Literalen besteht darin, dass Escapesequenzen wie \n für Newline nicht verarbeitet werden. Dadurch kann man z.B. @"c:\neu\datei.txt" statt "c:\\neu\\datei.txt" schreiben.

Wenn man in der @-Schreibweise einen String schreiben will, der selbst Anführungszeichen enthält, dann muss man die Anführungszeichen verdoppeln.

@"Er sagte: ""Hallo""" entspricht "Er sagte: \"Hallo\""

Man kann in der @-Schreibweise sogar Zeilenumbrüche direkt in den String packen:

Zeile2"`

entspricht

"Zeile1\nZeile2" oder "Zeile1\r\nZeile2"

je nachdem, was der Editor als Zeilentrenner in die Quelldatei schreibt.

Die ganze Geschichte steht in der MSDN:

string (C#-Referenz)

herbivore

PS: Escapesequenzen wie \n werden nur vom Compiler und nur innerhalb von (String-)Literalen behandelt und umgesetzt - bzw. in der @-Schreibweise eben ignoriert. Wenn zur Laufzeit Zeichen wie \ und n erstmal in einem String oder einer Datei stehen, erfolgt logischerweise keine automatische Umsetzung mehr, sondern dann werden die Zeichen als (zwei) normale, unabhängige Zeichen behandelt. Man kann die Umsetzung selber vornehmen, z.B. mit

myString = myString.Replace (@"\n", "\n");

PPS: Im Debugger werden bei der Anzeige von String-Werten enthaltene Backslashes automatisch gedoppelt. Die Zeichenfolge aus den zwei Zeichen \ und n wird als "\\n" angezeigt. Der im String enthaltene Backslash wird nur für die Anzeige gedoppelt; im String selbst ist er weiterhin nur einmal vorhanden. Ein einfacher, einzelner Zeilenvorschub wird dagegen als "\n" angezeigt; im String selbst ist weiterhin nur ein einziges Zeichen, nämlich der Zeilenvorschub vorhanden.

PPPS: Siehe auch [FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)