C# Language
Sekwencje ucieczki ciągów
Szukaj…
Składnia
- \ '- pojedynczy cytat (0x0027)
- \ "- podwójny cytat (0x0022)
- \\ - ukośnik odwrotny (0x005C)
- \ 0 - null (0x0000)
- \ a - alert (0x0007)
- \ b - backspace (0x0008)
- \ f - wysuw strony (0x000C)
- \ n - nowa linia (0x000A)
- \ r - powrót karetki (0x000D)
- \ t - zakładka pozioma (0x0009)
- \ v - zakładka pionowa (0x000B)
- \ u0000 - \ uFFFF - Znak Unicode
- \ x0 - \ xFFFF - znak Unicode (kod o zmiennej długości)
- \ U00000000 - \ U0010FFFF - Znak Unicode (do generowania surogatów)
Uwagi
Sekwencje specjalne łańcucha są przekształcane do odpowiedniego znaku w czasie kompilacji . Zwykłe ciągi zawierające ukośniki odwrotne nie są przekształcane.
Na przykład ciągi notEscaped
i notEscaped2
poniżej nie są przekształcane w znak nowej linii, ale pozostaną jako dwa różne znaki ( '\'
i '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
Sekwencje specjalne znaków Unicode
string sqrt = "\u221A"; // √
string emoji = "\U0001F601"; // 😁
string text = "\u0022Hello World\u0022"; // "Hello World"
string variableWidth = "\x22Hello World\x22"; // "Hello World"
Unikanie specjalnych symboli w literałach znaków
Apostrofy
char apostrophe = '\'';
Ukośnik wsteczny
char oneBackslash = '\\';
Unikanie specjalnych symboli w literałach łańcuchowych
Ukośnik wsteczny
// The filename will be c:\myfile.txt in both cases
string filename = "c:\\myfile.txt";
string filename = @"c:\myfile.txt";
Drugi przykład wykorzystuje dosłowny ciąg literału , który nie traktuje ukośnika odwrotnego jako znaku zmiany znaczenia.
cytaty
string text = "\"Hello World!\", said the quick brown fox.";
string verbatimText = @"""Hello World!"", said the quick brown fox.";
Obie zmienne będą zawierać ten sam tekst.
„Witaj świecie!”, Powiedział szybki brązowy lis.
Newlines
Dosłowne ciągi literałów mogą zawierać znaki nowej linii:
string text = "Hello\r\nWorld!";
string verbatimText = @"Hello
World!";
Obie zmienne będą zawierać ten sam tekst.
Nierozpoznane sekwencje specjalne powodują błędy czasu kompilacji
Następujące przykłady nie zostaną skompilowane:
string s = "\c";
char c = '\c';
Zamiast tego w czasie kompilacji wygenerują błąd Unrecognized escape sequence
.
Używanie sekwencji ucieczki w identyfikatorach
Sekwencje specjalne nie są ograniczone do string
i char
literałów.
Załóżmy, że musisz zastąpić metodę innej firmy:
protected abstract IEnumerable<Texte> ObtenirŒuvres();
i załóżmy, że znak Œ
nie jest dostępny w kodowaniu znaków używanym do plików źródłowych w języku C #. Masz szczęście, dozwolone jest stosowanie znaków ucieczki typu \u####
lub \U########
w identyfikatorach w kodzie. Zatem legalne jest pisanie:
protected override IEnumerable<Texte> Obtenir\u0152uvres()
{
// ...
}
a kompilator C # będzie wiedział, że Œ
i \u0152
są tym samym znakiem.
(Jednak dobrym pomysłem może być przejście na UTF-8 lub podobne kodowanie, które może obsłużyć wszystkie znaki).