Descobri que, embora a interpolação de strings seja realmente boa quando aplicada às chamadas Format da string da minha base de código existente, dado o limite de coluna geralmente preferido, a string rapidamente se torna muito longa para uma única linha. Especialmente quando as expressões interpoladas são complexas. Com uma string de formato, você tem uma lista de variáveis que podem ser divididas em várias linhas.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
Alguém tem algum meio preferido de quebrar essas linhas?
Suponho que você poderia fazer algo como:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
$""
que funcione como@""
$"some text { obj1.property }" + " more text { obj2.property }";
não faz o que você pensa que faz. Somente a primeira metade dessa expressão é uma sequência interpolada; é então concatenado com o não -interpolated string literal" more text { obj2.property }"
Respostas:
Você pode dividir a linha em várias linhas, mas eu não diria que a sintaxe parece mais agradável.
Você precisa usar a
$@
sintaxe para usar uma sequência literal interpolada e pode colocar novas linhas dentro dos{...}
parâmetros, como este:A string acima não conterá nenhuma nova linha e terá conteúdo como este:
(nota, formato norueguês)
Agora, tendo dito isso, eu não pararia de usar
string.Format
. Na minha opinião, algumas dessas expressões de interpolação de strings parecem realmente boas, mas as mais complexas começam a ficar muito difíceis de ler. Considerando que, a menos que você useFormattableString
, o código será compilado em uma chamada deString.Format
qualquer maneira, eu diria que continue indoString.Format
onde faz sentido.fonte
FormattableString
resume também a uma ligaçãoString.Format
.$@""
sintaxe!FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");
isso porque mescla as duas seqüências interpoladas em uma única sequência simples.> var name = "Simon"; var templateName = "How to interpolate a verbatim string"; var now = DateTime.UtcNow;. var output = $@"Hi {name}, This template is a demo of {templateName}. It was ran at {now.ToString("o")}"; > output
. A saída é"Hi Simon,\r\nThis template is a demo of How to interpolate a verbatim string.\r\n\r\nIt was ran at 2020-01-24T15:49:35.6678353Z"
Você pode combinar
$
e@
reunir para obter interpolação de string e literal de string de várias linhas:Mas isso dará a você um
NewLine
personagem no meio, portanto pode não ser o que você deseja.fonte
$@"
no visual studio, você deve iniciar cada nova linha na extremidade esquerda do editor de texto.Enquanto o OP pediu outra coisa, espero que muitas pessoas que leem essa pergunta desejem uma interpolação multilinha
$""
que funcione assim@""
. Para fazer isso, use$@""
fonte
É isso:
Observe o segundo
$
no$"..." + $"..."
fonte
FormattableString
elenco na sequência concatenada?Eu usei StringBuilder em ToString () substituído como um exemplo.
fonte
buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);
???