C# 11 - Интерполированные сырые строковые литералы
Узнайте, как использовать интерполированные сырые строковые литералы в C# 11, включая экранирование фигурных скобок, использование нескольких символов $ и условные операторы.
C# 11 вводит в язык понятие сырых строковых литералов, а вместе с ним появляется и набор новых возможностей для интерполяции строк.
Прежде всего, можно продолжать использовать привычный синтаксис интерполяции в сочетании с сырыми строковыми литералами:
var x = 5, y = 4;
var interpolatedRaw = $"""The sum of "{x}" and "{y}" is "{ x + y }".""";
Вывод будет таким:
The sum of "5" and "4" is "9".
Экранирование фигурных скобок { и }
Фигурные скобки экранируются их удвоением. Если взять пример выше и удвоить скобки:
var interpolatedRaw= $"""The sum of "{{x}}" and "{{y}}" is "{{ x + y }}".""";
Вывод будет таким:
The sum of "{x}" and "{y}" is "{ x + y }".
Как видно, скобки больше не играют роль интерполяции, и каждая пара двойных скобок превращается в одиночную скобку в выводе.
Несколько символов $ в интерполированных сырых строковых литералах
В интерполированном сыром строковом литерале можно использовать несколько символов $ аналогично последовательности """. Количество символов $ в начале строки определяет, сколько { и } нужно для интерполяции.
Например, две строки ниже выведут абсолютно то же, что и наш исходный пример:
var interpolatedRaw2 = $$"""The sum of "{{x}}" and "{{y}}" is "{{ x + y }}".""";
var interpolatedRaw3 = $$$"""The sum of "{{{x}}}" and "{{{y}}}" is "{{{ x + y }}}".""";
Условный оператор в интерполированной строке
Двоеточие (:) имеет особое значение в интерполированных строках, поэтому условные выражения требуют дополнительной пары круглых скобок ( ), чтобы работать. Например:
var conditionalInterpolated = $"I am {x} year{(x == 1 ? "" : "s")} old.";
Ошибки
Error CS9006 The interpolated raw string literal does not start with enough ’$’ characters to allow this many consecutive opening braces as content.
Эта ошибка компилятора возникает, когда строка содержит последовательность фигурных скобок, длина которой равна или больше удвоенной длины последовательности символов $ в начале строки.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.