Что означает? - [[Литералы (Literals)|String Literals]] - [[String interpolation (интерполяция строк)|String interpolation]] Релевантные источники: - [String interpolation using `
](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated) - [Verbatim text - `@` in variables, attributes, and string literals](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim) - [Raw string literal text - `"""` in string literals](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/raw-string) ### Обычные строки (Regular strings) Обычные строки заключены в двойные кавычки. Для экранирования специальных символов, таких как `\n`, `\t`, или самих кавычек, используется символ обратного слэша (`\`). ```csharp string regularString = "Hello, World!\nThis is a new line."; ``` ### Verbatim String Literal "Verbatim string literals" переводится как "дословные строковые литералы" или "буквальные строковые литералы". Этот термин обозначает строки, которые интерпретируются буквально, без обработки управляющих последовательностей или экранирования символов. Это означает, что символы в строке не требуют экранирования, и строка может содержать управляющие символы, такие как обратные слэши, и переносы строк. Например: ```csharp string path = @"C:\Users\Username\Documents"; ``` В verbatim строках можно использовать двойные кавычки `""` для того, чтобы вставить одну кавычку в текст строки. ##### Verbatim String Literal для многострочных строк Строки с `@` могут содержать переносы строк и специальные символы без экранирования: ```csharp string multiLineText = @"Это многострочная строка. Она включает переносы строк и специальные символы, такие как \ и """; Console.WriteLine(multiLineText); /* Вывод: Это многострочная строка. Она включает переносы строк и специальные символы, такие как \ и " */ ``` Символ `@` в C# работает в многострочном режиме, потому что он указывает компилятору на то, что строка должна быть интерпретирована буквально, без обработки управляющих символов, таких как `\` (обратный слэш), и без необходимости экранирования символов. Без `@`, компилятор бы воспринял перенос строки как ошибку синтаксиса. С `@` перенос строки просто становится частью значения строки. Таким образом, символ `@` позволяет более удобно работать с текстами, где важна точная структура, включая многострочные строки. ### String Interpolation (Интерполяция Строк) Интерполяция строк позволяет вставлять значения переменных и выражений прямо в строковые литералы, делая код более читаемым и удобным. Интерполированные строки начинаются с `
перед кавычками. - **Пример с переменными:** ```csharp string name = "Alice"; int age = 30; string message = quot;Name: {name}, Age: {age}"; ``` В данном примере переменные `name` и `age` будут автоматически преобразованы в строки и вставлены в результат. - **Интерполяция с выражениями:** Можно также использовать выражения внутри фигурных скобок: ```csharp string greeting = quot;Hello, {name.ToUpper()}! Next year, you will be {age + 1}."; ``` - **Совместное использование дословных строк и интерполяции:** Можно сочетать дословные строки и интерполяцию, используя оба символа `
и `@`: ```csharp string filePath = @"C:\Users\Name\Documents"; string fileName = "report.txt"; string fullPath = $@"{filePath}\{fileName}"; ``` - **Форматирование:** Можно использовать форматирование строк внутри интерполяции: ```csharp double price = 19.99; string formatted = quot;Price: {price:C2}"; // C2 форматирует число как валюту с двумя десятичными знаками ``` ### Raw String Literals (C\# 11) В C# существует тип строковых литералов, называемый *raw string literals* (буквально "сырой строковый литерал"), который был введен в версии C# 11. Этот тип строковых литералов предоставляет более гибкий способ создания многострочных строк, поддерживает включение любых символов (в том числе кавычек), а также упрощает работу с кодом, требующим определенного форматирования. ##### Примеры использования **Простой многострочный текст** Raw string literal начинается и заканчивается тремя кавычками (`"""`). Можно использовать больше трех кавычек, если внутри строки необходимо использовать последовательности из трех кавычек. ```csharp string rawString = """ Это пример строки, которая может занимать несколько строк. """; ``` **Строка с кавычками** Такие строки могут быть многострочными, и весь текст между открывающими и закрывающими кавычками включается в строку как есть, сохраняя все символы, включая пробелы и переводы строк. ```csharp string rawString = """ Это пример строки, содержащей "кавычки". """; ``` **Интерполяция строк:** В raw string literals также поддерживается интерполяция строк, как и в обычных строках, с помощью `
. ```csharp string name = "Мир"; string rawString = quot;"" Привет, {name}! Как дела? """; ``` **Строка с тремя кавычками** Внутри строки можно использовать любые символы, включая кавычки и апострофы. Если строка должна содержать три кавычки подряд, можно использовать четыре кавычки в начале и конце строки и так далее. ```csharp string rawString = """"""" Это пример строки с """ триплетом кавычек. """"""" ``` ##### Несколько символов интерполяции подряд Количество `
определяет, сколько `{` и `}` требуется для интерполяции. Например, с двумя `
интерполяционные выражения заключаются в двойные фигурные скобки `{{ и }}`, а одиночные `{ и }` выводятся как есть. С одним символом `
```csharp var pointMessage = quot;""The point "{X}, {Y}" is {Math.Sqrt(X * X + Y * Y):F3} from the origin"""; ``` С двумя символами `
```csharp var pointMessage = $"""{The point {{{X}}, {{Y}}} is {{Math.Sqrt(X * X + Y * Y):F3}} from the origin}"""; ```