Literal de cadena interpolada C # multilínea

C # 6 ofrece compatibilidad con el compilador para literales de cadena 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 cuerdas puedes:

    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ías usar\r\n en lugar deEnvironment.NewLine (menos portátil), o llévelo a un local, pero habrá casos en los que no podrá reducirlo por debajo de una línea sin perder fuerza semántica.

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

¿Deberíamos simplemente encadenar usandoStringBuilder para cuerdas 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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta