Как использовать escape-символы с интерполяцией строк в C# 6?

Я использую строковую интерполяцию и люблю ее, однако у меня есть проблема, когда я пытаюсь включить обратную косую черту в свой вывод, но не могу заставить ее работать.

Я хочу что-то вроде этого..

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"

Я хочу, чтобы вывод комбо был

myDomain\myUserName

То, что я получаю, это синтаксическая ошибка о том, что \ является символом escape. Если я введу \\, то ошибка snytax исчезнет, ​​но вывод будет myDomain\\myUsername

Как включить экранированные символы в интерполированную строку?

6 ответов

Вырваться с обратной косой чертой (\) работает для всех персонажей, кроме фигурных скобок.

Если вы пытаетесь избежать фигурной скобки ({ или же }), вы должны использовать {{ или же }} по https://msdn.microsoft.com/en-us/library/dn961160.aspx.

... Все вхождения двойных фигурных скобок ("{{" и "}}") преобразуются в одну фигурную скобку.

Вы можете сделать это, используя как $@. Порядок важен.

var combo = $@"{domain}\{userName}";

Эдуардо прав. Вы можете избежать фигурных скобок, удваивая. Поэтому, если вы хотите вывести переменную домена как {mydomain}, вам нужно сделать:

$"{{{domain}}}";

Кроме того, предполагая, что текущая дата - 1 сентября 2016 года, делаем это:

$"The date is {DateTime.Now}";

будет выводить что-то вроде "Дата 2016/09/01 3:04:48 PM" в зависимости от вашей локализации. Вы также можете отформатировать дату, выполнив:

$"The date is {DateTime.Now : MMMM dd, yyyy}";

который вывел бы "Дата 1 сентября 2016 года". Интерполированные строки гораздо более читабельны. Хороший ответ Эдуардо.

$"{domain}\\{user}"

Работает нормально - экранирование работает как обычно (кроме экранирования {). По крайней мере, на.NET 4.6 и VS 14.0.22823 D14REL.

Если по какой-то причине это не сработало (возможно, вы используете более старую версию компилятора?), Вы также можете попытаться быть более явным:

$"{domain}{@"\"}{user}"

Привет, правило для экранирования обратной косой черты в интерполированной строке дублирует обратную косую черту:

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\\{userName}";

консольный вывод

но если вы также используете интерполированную строку как дословную строку, вам не нужно экранировать обратную косую черту:

var domain = "mydomain";
var userName = "myUserName";
var combo = $@"{domain}\{userName}";

и вы получите то же самое:

консольный вывод

Для учебника о интерполированной строке: смотрите видео интерполированную строку

Если бы я не правильно понял. Решение очень простое

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{{{domain}}}\\{{{userName}}}";
Console.WriteLine(combo);

Я поделюсь ответом от birdamongmen, а также с хорошей ссылкой, предоставленной там. Надеюсь, это полезно для вас. Мои 5 центов

Вы можете использовать это -

'First, declare the curley braces as chars
        Dim LeftBrace As Char = "{"
        Dim RightBrace As Char = "}"

        'Then in your string, use like this-
        Dim myStr As String = $"This is a {LeftBrace}String{RightBrace}"

        'Now, the output will be
        ' This is a {string}code here
Другие вопросы по тегам