Tenho usado interpolação de strings e adoro isso, mas tenho um problema em que estou tentando incluir uma barra invertida na saída, mas não consigo fazer com que funcione.
O que eu quero é algo assim ..
var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"
Quero que a saída do combo seja
myDomain\myUserName
O que estou recebendo é um erro de sintaxe sobre o \ ser um caractere de escape. Se eu inserir \\, o erro snytax desaparece, mas a saída é myDomain \\ myUsername
Como posso incluir caracteres de escape em uma string interpolada?
c#
.net
string-interpolation
Matt
fonte
fonte
$@"{domain}\{userName}"
. Acho que você deveria tentar e aceitar. Eu tive exatamente o mesmo problema, também por ser domínio e nome de usuário, e seu método funciona bem.Respostas:
Escapar com uma barra invertida (
\
) funciona para todos os caracteres, exceto uma chave.Se estiver tentando escapar de uma chave (
{
ou}
), você deve usar{{
ou de}}
acordo com https://msdn.microsoft.com/en-us/library/dn961160.aspx .fonte
Você pode fazer isso usando tanto $ @. A ordem é importante.
var combo = $@"{domain}\{userName}";
fonte
Eduardo está correto. Você escapa das chaves dobrando-se. Portanto, se você quiser gerar a variável de domínio como {mydomain}, você precisa fazer:
$"{{{domain}}}";
Além disso, supondo que a data atual seja 1º de setembro de 2016, faça o seguinte:
$"The date is {DateTime.Now}";
geraria algo como "A data é 2016/09/01 3:04:48 PM" dependendo da sua localização. Você também pode formatar a data fazendo:
$"The date is {DateTime.Now : MMMM dd, yyyy}";
que geraria "A data é 1º de setembro de 2016". Strings interpoladas são muito mais legíveis. Boa resposta Eduardo.
fonte
$"{domain}\\{user}"
Funciona bem - o escape funciona normalmente (exceto ao escapar
{
). Pelo menos no .NET 4.6 e VS 14.0.22823 D14REL.Se não funcionar por algum motivo (talvez você esteja usando uma versão mais antiga do compilador?), Você também pode tentar ser mais explícito:
$"{domain}{@"\"}{user}"
fonte
Olá, a regra para escapar da barra invertida na string interpolada é duplicar a barra invertida:
var domain = "mydomain"; var userName = "myUserName"; var combo = $"{domain}\\{userName}";
mas se você também usar a string interpolada como string literal, não será necessário escapar da barra invertida:
var domain = "mydomain"; var userName = "myUserName"; var combo = $@"{domain}\{userName}";
e você recebe o mesmo:
Para um tutorial sobre string interpolada: veja string interpolada de vídeo
fonte
Se eu não entendesse mal. A solução é muito simples
var domain = "mydomain"; var userName = "myUserName"; var combo = $"{{{domain}}}\\{{{userName}}}"; Console.WriteLine(combo);
Eu compartilho a resposta do birdamongmen e também uma boa referência fornecida lá. Espero que seja útil para você. Meus 5 centavos
fonte
Você pode usar isso -
'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
fonte