interpolacion ejemplos cadenas c# .net string multiline string-interpolation

cadenas - string c# ejemplos



Literal de cadena interpolada de Multiline C# (3)

C # 6 brinda compatibilidad con el compilador para literales de cadenas interpolados con sintaxis:

var person = new { Name = "Bob" }; string s = $"Hello, {person.Name}.";

Esto es ideal para cadenas cortas, pero si desea producir una cadena más larga, ¿debe especificarse en una sola línea?

Con otros tipos de cadenas, puede:

var multi1 = string.Format(@"Height: {0} Width: {1} Background: {2}", height, width, background);

O:

var multi2 = string.Format( "Height: {1}{0}" + "Width: {2}{0}" + "Background: {3}", Environment.NewLine, height, width, background);

No puedo encontrar una manera de lograr esto con la interpolación de cadenas sin tenerlo todo en una sola línea:

var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";

Me doy cuenta de que en este caso podría usar /r/n en lugar de Environment.NewLine (menos portátil), o sacarlo a un local, pero habrá casos en los que no podrá reducirlo por debajo de una línea sin perder semántica fuerza.

¿Es simplemente el caso de que la interpolación de cadenas no se debe usar para cadenas largas?

¿Deberíamos encadenar usando StringBuilder para cadenas más largas?

var multi4 = new StringBuilder() .AppendFormat("Width: {0}", width).AppendLine() .AppendFormat("Height: {0}", height).AppendLine() .AppendFormat("Background: {0}", background).AppendLine() .ToString();

¿O hay algo más elegante?


Personalmente, solo agrego otra cadena interpolada usando la concatenación de cadenas

Por ejemplo

var multi = $"Height : {height}{Environment.NewLine}" + $"Width : {width}{Environment.NewLine}" + $"Background : {background}";

Encuentro que es más fácil de formatear y leer.

Esto tendrá una sobrecarga adicional en comparación con el uso de $ @ "", pero solo en las aplicaciones de mayor rendimiento será notorio. En la memoria, las operaciones de cadena son extremadamente baratas en comparación con la E / S de datos. Leer una sola variable desde el db tomará cientos de veces más en la mayoría de los casos.


Probablemente usaría una combinación

var builder = new StringBuilder() .AppendLine($"Width: {width}") .AppendLine($"Height: {height}") .AppendLine($"Background: {background}");


Puede combinar $ y @ juntos para obtener un literal de cadena interpolada de líneas múltiples:

string s = $@"Height: {height} Width: {width} Background: {background}";

Fuente: líneas de interpolación de cadenas largas en C # 6 (¡Gracias a Ric por encontrar el hilo!)