String-Escape-Sequenzen

String-Escape-Sequenzen

# Spezielle Symbole in String-Literalen maskieren

Backslash

// The filename will be c:\myfile.txt in both cases
string filename = "c:\\myfile.txt";
string filename = @"c:\myfile.txt";

Das zweite Beispiel verwendet ein wörtliches Zeichenfolgenliteral , das den umgekehrten Schrägstrich nicht als Escape-Zeichen behandelt.

Zitate

string text = "\"Hello World!\", said the quick brown fox.";
string verbatimText = @"""Hello World!"", said the quick brown fox.";

Beide Variablen enthalten denselben Text.

"Hallo Welt!", sagte der schnelle braune Fuchs.

Zeilenumbrüche

Wörtliche Zeichenfolgenliterale können Zeilenumbrüche enthalten:

string text = "Hello\r\nWorld!";
string verbatimText = @"Hello
World!";

Beide Variablen enthalten denselben Text.

# Escape-Sequenzen für Unicode-Zeichen

string sqrt = "\u221A";      // √
string emoji = "\U0001F601"; // 😁
string text = "\u0022Hello World\u0022"; // "Hello World"
string variableWidth = "\x22Hello World\x22"; // "Hello World"

# Escapezeichen für Sonderzeichen in Zeichenliteralen

Apostrophe

char apostrophe = '\'';

Backslash

char oneBackslash = '\\';

# Verwenden von Escape-Sequenzen in Bezeichnern

Escape-Sequenzen sind nicht auf string beschränkt und char Literale.

Angenommen, Sie müssen eine Methode eines Drittanbieters überschreiben:

protected abstract IEnumerable<Texte> ObtenirŒuvres();

und nehmen Sie das Zeichen Œ an ist in der Zeichencodierung, die Sie für Ihre C#-Quelldateien verwenden, nicht verfügbar. Sie haben Glück, es ist erlaubt, Escapezeichen vom Typ \u#### zu verwenden oder \U######## in Identifikatoren im Code. Es ist also erlaubt zu schreiben:

protected override IEnumerable<Texte> Obtenir\u0152uvres()
{
    // ...
}

und der C#-Compiler kennt Πund \u0152 sind das gleiche Zeichen.

(Es könnte jedoch eine gute Idee sein, zu UTF-8 oder einer ähnlichen Kodierung zu wechseln, die alle Zeichen verarbeiten kann.)

# Nicht erkannte Escape-Sequenzen erzeugen Kompilierungsfehler

Die folgenden Beispiele werden nicht kompiliert:

string s = "\c";
char c = '\c';

Stattdessen erzeugen sie den Fehler Unrecognized escape sequence zur Kompilierzeit.

#-Syntax

  • ' – einfaches Anführungszeichen (0x0027)
  • " — doppelte Anführungszeichen (0x0022)
  • \ — umgekehrter Schrägstrich (0x005C)
  • \0 – null (0x0000)
  • \a — Warnung (0x0007)
  • \b — Rücktaste (0x0008)
  • \f — Seitenvorschub (0x000C)
  • \n — neue Zeile (0x000A)
  • \r — Wagenrücklauf (0x000D)
  • \t – horizontaler Tabulator (0x0009)
  • \v — vertikaler Tabulator (0x000B)
  • \u0000 - \uFFFF — Unicode-Zeichen
  • \x0 - \xFFFF — Unicode-Zeichen (Code mit variabler Länge)
  • \U00000000 - \U0010FFFF — Unicode-Zeichen (zum Generieren von Ersatzzeichen)

# Bemerkungen

Zeichenfolgen-Escape-Sequenzen werden zur Kompilierungszeit in das entsprechende Zeichen umgewandelt . Gewöhnliche Zeichenfolgen, die zufällig Rückwärtsschrägstriche enthalten, sind nicht umgewandelt.

Zum Beispiel die Zeichenfolgen notEscaped und notEscaped2 unten werden nicht in ein Zeilenumbruchzeichen umgewandelt, sondern bleiben zwei verschiedene Zeichen ('\' und 'n' ).

string escaped = "\n";
string notEscaped = "\\" + "n";
string notEscaped2 = "\\n";

Console.WriteLine(escaped.Length); // 1
Console.WriteLine(notEscaped.Length); // 2            
Console.WriteLine(notEscaped2.Length); // 2