Sequenze di escape di stringhe

Sequenze di escape di stringhe

# Simboli speciali di escape in stringhe letterali

Barra rovesciata

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

Il secondo esempio usa una stringa letterale letterale , che non considera la barra rovesciata come un carattere di escape.

Citazioni

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

Entrambe le variabili conterranno lo stesso testo.

"Hello World!", disse la veloce volpe bruna.

Nuove righe

Le stringhe letterali letterali possono contenere nuove righe:

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

Entrambe le variabili conterranno lo stesso testo.

# Sequenze di escape dei caratteri Unicode

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

# Simboli speciali di escape nei caratteri letterali

Apostrofi

char apostrophe = '\'';

Barra rovesciata

char oneBackslash = '\\';

# Utilizzo di sequenze di escape negli identificatori

Le sequenze di escape non sono limitate a string e char letterali.

Supponiamo di dover sovrascrivere un metodo di terze parti:

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

e supponiamo il carattere Œ non è disponibile nella codifica dei caratteri utilizzata per i file di origine C#. Sei fortunato, è consentito utilizzare escape del tipo \u#### o \U######## negli identificatori nel codice. Quindi è legale scrivere:

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

e il compilatore C# conoscerà Œ e \u0152 sono lo stesso carattere.

(Tuttavia, potrebbe essere una buona idea passare a UTF-8 o una codifica simile in grado di gestire tutti i caratteri.)

# Le sequenze di escape non riconosciute producono errori in fase di compilazione

I seguenti esempi non verranno compilati:

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

Invece, produrranno l'errore Unrecognized escape sequence in fase di compilazione.

# Sintassi

  • ' — virgolette singole (0x0027)
  • " — virgolette doppie (0x0022)
  • \ — barra rovesciata (0x005C)
  • \0 — nullo (0x0000)
  • \a — avviso (0x0007)
  • \b — backspace (0x0008)
  • \f — feed modulo (0x000C)
  • \n — nuova linea (0x000A)
  • \r — ritorno a capo (0x000D)
  • \t:scheda orizzontale (0x0009)
  • \v — scheda verticale (0x000B)
  • \u0000 - \uFFFF — Carattere Unicode
  • \x0 - \xFFFF — Carattere Unicode (codice con lunghezza variabile)
  • \U00000000 - \U0010FFFF — Carattere Unicode (per la generazione di surrogati)

# Osservazioni

Le sequenze di escape delle stringhe vengono trasformate nel carattere corrispondente in ora di compilazione . Le stringhe ordinarie che contengono barre rovesciate non trasformato.

Ad esempio, le stringhe notEscaped e notEscaped2 sotto non vengono trasformati in un carattere di nuova riga, ma rimarranno come due caratteri diversi ('\' e '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