[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Начиная с C# 11, можно использовать необработанные строковые литералы для упрощения создания строк, которые являются многострочными, или использовать любые символы, требующие escape-последовательностей.
Многое из того, что помещается в строковые литералы, является своего рода «кодом» — не только текст программы, но и данные JSON и XML, HTML, регулярные выражения, SQL-запросы и т.д. Очень неприятно, когда многие специальные символы, которые встречаются в таком тексте, имеют особое значение в строковых литералах C#! В качестве примера можно привести \ и «, к которым в интерполированных строках присоединяются { и }. Необходимость экранировать все эти символы – усложняет процесс разработки.
Необработанный строковый литерал разграничивается как минимум тремя двойными кавычками:
1 2 3 4 5 |
static void Main() { string message = """Hello \"content"\ """; Console.WriteLine(message);//Hello \"content"\ } |
Если необходимо использовать 3 кавычки как часть содержимого, используйте 4 для обозначения начала и конца строки:
1 2 |
string message = """"Hello \"content"\ - """ """"; Console.WriteLine(message);//Hello \"content"\ - """ |
Добавляя в строку C# или Html верстку, так же возникали проблемы форматирования текста, попробуем выполнить вставку с применением необработанных строковых литералов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
static void Main() { string htmlCode = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>Hello</h1> </body> </html> """; Console.WriteLine(htmlCode); } |
Хочу так же обратить внимание, что начиная с C# 11, при вставке многоуровневого текста в обычную строку, происходит автоматическое преобразование текста в одну строку с добавлением символов управляющей последовательности:
1 |
string htmlCode = "<!DOCTYPE html>\r\n <html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\">\r\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>Document</title>\r\n </head>\r\n <body>\r\n <h1>Hello</h1>\r\n </body>\r\n </html>\r\n"; |
При использовании нескольких рядков текста, многострочный необработанный строковый литерал требует открытия и закрывающей последовательности кавычек в собственной строке:
1 2 3 |
string htmlCode = """ Hello world """; |
При создании текста, включающего символы, требующие escape-последовательностей при использовании строковых литералов с кавычками или строковых литералов, следует использовать именно необработанные строковые литералы, так как они справятся с этой задаче лучше любого другого инструмента!
Рассмотрим на примере следующей Json структуры файла:
1 2 3 4 5 6 7 8 9 |
{ "Date": "2019-08-01", "TemperatureCelsius": 25, "Summary": "Hot", "DatesAvailable": [ "2019-08-01", "2019-08-02" ] } |
В коде C#, определим 3 вида строки: обычную, вербальную и необработанную:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ string defaultStr = "{\r\n \"Date\": \"2019-08-01\",\r\n \"TemperatureCelsius\": 25,\r\n \"Summary\": \"Hot\",\r\n \"DatesAvailable\": [\r\n \"2019-08-01\",\r\n \"2019-08-02\"\r\n ]\r\n}"; string verbatimStr = @"{ ""Date"": ""2019-08-01"", ""TemperatureCelsius"": 25, ""Summary"": ""Hot"", ""DatesAvailable"": [ ""2019-08-01"", ""2019-08-02"" ] }"; string rawStringStr = """ { "Date": "2019-08-01", "TemperatureCelsius": 25, "Summary": "Hot", "DatesAvailable": [ "2019-08-01", "2019-08-02" ] } """; } |
Вывод идентичен, а реализация и восприятие с кода отличается.