Как использовать escape-символы со строчной интерполяцией в С# 6?
Я использую строчную интерполяцию и люблю ее, однако у меня есть проблема, когда я пытаюсь включить обратную косую черту в свой вывод, но я не могу заставить ее работать.
Я хочу что-то вроде этого.
var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"
Я хочу, чтобы результат комбо был
myDomain\myUserName
То, что я получаю, является синтаксической ошибкой о том, что\является escape-символом. Если я положил \\, то ошибка snytax исчезнет, но выход будет myDomain\\myUsername
Как включить экранированные символы в интерполированную строку?
Ответы
Ответ 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 года". Интерполированные строки намного читаемы. Хороший ответ Эдуардо.