He descubierto que, si bien la interpolación de cadenas es realmente agradable cuando se aplica a las llamadas de formato de cadenas de mi base de código existente, dado el límite de columna generalmente preferido, la cadena rápidamente se vuelve demasiado larga para una sola línea. Especialmente cuando las expresiones que se interpolan son complejas. Con una cadena de formato tiene una lista de variables que puede dividir en varias líneas.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
¿Alguien tiene algún medio preferido para romper estas líneas?
Supongo que podrías hacer algo como:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
$""
que funcione como@""
$"some text { obj1.property }" + " more text { obj2.property }";
no hace lo que parece pensar que hace. Solo la primera mitad de esa expresión es una cadena interpolada; luego se concatena con el literal de cadena no interpolado" more text { obj2.property }"
Respuestas:
Usted puede romper la línea en varias líneas, pero yo no diría que la buena apariencia de sintaxis más.
Debe usar la
$@
sintaxis para usar una cadena textual interpolada , y puede colocar nuevas líneas dentro de los{...}
parámetros, de esta manera:La cadena anterior no contendrá ninguna línea nueva y en realidad tendrá contenido como este:
(nota, formato noruego)
Ahora, habiendo dicho eso, no dejaría de usar
string.Format
. En mi opinión, algunas de estas expresiones de interpolación de cadenas se ven realmente bien, pero las más complejas comienzan a ser muy difíciles de leer. Teniendo en cuenta que, a menos que lo useFormattableString
, el código se compilará en una llamada deString.Format
todos modos, yo diría que continúe conString.Format
lo que tiene sentido.fuente
FormattableString
reduce a una llamadaString.Format
.$@""
sintaxis!FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");
porque combina las dos cadenas interpoladas en una sola cadena 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 salida es"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"
Puede combinar
$
y@
juntos para obtener interpolación de cadena y literal de cadena de varias líneas:Pero eso te dará un
NewLine
personaje intermedio, por lo que puede que no sea lo que quieres.fuente
$@"
en Visual Studio, debe comenzar cada nueva línea desde el extremo izquierdo del editor de texto.Si bien OP solicitó algo más, espero que muchas personas que lean esta pregunta deseen una interpolación multilínea
$""
que funcione de la misma manera@""
. Para hacer eso, use$@""
fuente
Eso es todo:
Tenga
$
en cuenta el segundo en el$"..." + $"..."
fuente
FormattableString
molde en la cadena concatenada?He usado StringBuilder dentro de ToString () anulado como ejemplo.
fuente
buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);
???