Start Debugging
2023-03-17 Обновлено 2023-11-05 csharp Edit on GitHub

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.

< Назад