Как использовать 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