Подтвердить что ты не робот

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

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

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

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

Я хочу, чтобы результат комбо был

myDomain\myUserName

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

var combo = [email protected]"{domain}\{userName}";

Ответ 3

$"{domain}\\{user}"

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

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

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

Ответ 4

Если бы я не промахнулся. Решение действительно простое

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

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

Ответ 5

Эдуардо правильно. Вы избегаете фигурных скобок, удваивая их. Поэтому, если вы хотите вывести переменную домена как {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 года". Интерполированные строки намного читаемы. Хороший ответ Эдуардо.