Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1447. #CSharp11 Обзор Новых Функций C# 11. Начало Я уже ранее кратко описывал, какие новинки должны были появиться, а потом и появились в C# 11. В этой серии подведём итоги. Что же появилось, а что нет. 1. Необработанные (raw) строковые литералы (включено в релиз) С обычными строками в C# бывает трудно работать, потому что нужно экранировать кавычки ("), обратную косую черту (\) и разрывы строк (\n). В предыдущих версиях C# уже было решение — дословные (verbatim) строки, которые начинаются с @ и допускают использование специальных символов. Вместо:
string path = "c:\\myfilepath\\with-backslashes";
будет:
string path = @"c:\myfilepath\with-backslashes";

Этот подход работает достаточно хорошо для путей к файлам и регулярных выражений, но у него есть своя проблема с экранированием. Строки по-прежнему заключаются в кавычки, а кавычки являются обычным символом в коде, разметке и регулярных выражениях. Это означает, что вы не можете вставить какой-либо контент такого типа в дословную строку, не просмотрев её предварительно. C# 11 вводит необработанные строковые литералы, чтобы обойти проблему экранирования. Используется новый разделитель — ряд кавычек, за которыми следует разрыв строки (в начале), и разрыв строки, за которым следует такое же количество кавычек (в конце). Вы просто вставляете свой блок кода или разметку между ними:
string xml = """
  <part number="1976">
    <name>Windscreen Wiper</name>
    <description>The Windscreen wiper automatically removes
       rain from your windscreen. It has a rubber
       <ref part="1977">blade</ref>, which can be ordered
       separately.
    </description>
  </part>
  """;

Если вы обеспокоены тем, что внутри вашей строки может появиться последовательность из трёх двойных кавычек, можно изменить разделитель и использовать столько кавычек, сколько нужно, только одинаковое количество в начале и в конце:
string xml = """" 
    Теперь можно использовать """ в строке.
    """";

Как и в случае с дословными строками, в необработанной строке сохраняются разрывы строк и пробелы. Но есть одно исключение. Общие пробелы — количество, которое используется для выравнивания всего текста — обрезаются. Это означает, что в первом примере обрежутся первые 2 пробела во всех строках. Необработанные строки не предназначены для замены дословных строк. Они предназначены для особого случая, когда вам нужно вставить блок произвольного кода или разметки. Также можно использовать интерполяцию с помощью знака $. Количество знаков $ в разделителе должно быть равно количеству фигурных скобок, необходимых для ссылки на переменную:
int number = 1;
string json =
  $$"""
  {
    "number": "{{number}}"
  }
  """;
В примере выше использованы два знака $ в начале, поэтому нужно включить две фигурные скобки, чтобы указать переменную, на которую мы хотим сослаться. Не беспокойтесь запутаться в пробелах и скобках. IDE в большинстве случаев подсветят интерполированные переменные или сообщат вам об ошибке в синтаксисе. Продолжение следует… Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727