J'ai trouvé que si l'interpolation de chaîne est vraiment agréable lorsqu'elle est appliquée aux appels de format de chaîne de ma base de code existante, étant donné la limite de colonne généralement préférée, la chaîne devient rapidement trop longue pour une seule ligne. Surtout lorsque les expressions interpolées sont complexes. Avec une chaîne de format, vous avez une liste de variables que vous pouvez diviser en plusieurs lignes.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
Quelqu'un a-t-il un moyen préféré de briser ces lignes?
Je suppose que vous pourriez faire quelque chose comme:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
$""
qui fonctionne comme@""
$"some text { obj1.property }" + " more text { obj2.property }";
ne fait pas ce que vous semblez penser. Seule la première moitié de cette expression est une chaîne interpolée; il est ensuite concaténé avec la chaîne littérale non interpolée" more text { obj2.property }"
Réponses:
Vous pouvez diviser la ligne en plusieurs lignes, mais je ne dirais pas que la syntaxe est plus belle.
Vous devez utiliser la
$@
syntaxe pour utiliser une chaîne verbatim interpolée , et vous pouvez placer des retours à la ligne à l'intérieur des{...}
paramètres, comme ceci:La chaîne ci-dessus ne contiendra aucune nouvelle ligne et aura en fait un contenu comme celui-ci:
(note, format norvégien)
Maintenant, cela dit, je ne cesserais pas d'utiliser
string.Format
. À mon avis, certaines de ces expressions d'interpolation de chaîne semblent vraiment bonnes, mais les plus complexes commencent à devenir très difficiles à lire. Étant donné qu'à moins que vous ne l'utilisiezFormattableString
, le code sera de toute façon compilé dans un appel àString.Format
, je dirais de continuerString.Format
là où cela a du sens.la source
FormattableString
se résume à un appel àString.Format
trop.$@""
syntaxe!FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");
car il fusionne les deux chaînes interpolées en une seule chaîne simple.> 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
. La sortie est"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"
Vous pouvez combiner
$
et@
ensemble pour obtenir une interpolation de chaîne et un littéral de chaîne multiligne:Mais cela vous donnera un
NewLine
personnage entre les deux, donc ce n'est peut-être pas ce que vous voulez.la source
$@"
dans Visual Studio, vous devez commencer chaque nouvelle ligne à l'extrême gauche de l'éditeur de texte.Alors qu'OP a demandé autre chose, je m'attends à ce que de nombreuses personnes lisant cette question aimeraient une interpolation multiligne
$""
qui fonctionne comme@""
. Pour ce faire, utilisez$@""
la source
Ça y est:
Notez le deuxième
$
dans le$"..." + $"..."
la source
FormattableString
cast sur la chaîne concaténée?J'ai utilisé StringBuilder dans ToString () remplacé comme exemple.
la source
buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);
???