C # 6 bietet Compiler-Unterstützung für interpolierte String-Literale mit Syntax:
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
Dies ist ideal für kurze Zeichenfolgen. Wenn Sie jedoch eine längere Zeichenfolge erstellen möchten, muss diese in einer einzelnen Zeile angegeben werden.
Mit anderen Arten von Zeichenfolgen können Sie:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
Oder:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
Ich kann keinen Weg finden, dies mit String-Interpolation zu erreichen, ohne alles in einer Zeile zu haben:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
Mir ist klar, dass Sie in diesem Fall \r\n
anstelle von Environment.NewLine
(weniger portabel) verwenden oder es an einen lokalen Standort ziehen können, aber es wird Fälle geben, in denen Sie es nicht unter eine Zeile reduzieren können, ohne die semantische Stärke zu verlieren.
Ist es einfach so, dass die String-Interpolation nicht für lange Strings verwendet werden sollte?
Sollten wir nur Zeichenfolgen StringBuilder
für längere Zeichenfolgen verwenden?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
Oder gibt es etwas eleganteres?
Antworten:
Sie können kombinieren
$
und@
zusammen ein mehrzeiliges interpoliertes Zeichenfolgenliteral erhalten:Quelle: Lange String-Interpolationslinien in C # 6 (Danke an @Ric für das Finden des Threads!)
quelle
Ich würde wahrscheinlich eine Kombination verwenden
var builder = new StringBuilder() .AppendLine($"Width: {width}") .AppendLine($"Height: {height}") .AppendLine($"Background: {background}");
quelle
String.Concat
könnte hier auch eine Option sein.Persönlich füge ich einfach eine weitere interpolierte Zeichenfolge mithilfe der Zeichenfolgenverkettung hinzu
Zum Beispiel
var multi = $"Height : {height}{Environment.NewLine}" + $"Width : {width}{Environment.NewLine}" + $"Background : {background}";
Ich finde das einfacher zu formatieren und zu lesen.
Dies wird hat zusätzlichen Aufwand im Vergleich zu $ mit @“" , sondern nur in den Performance - kritischen Anwendungen wird dies spürbar. Im Speicher sind Zeichenfolgenoperationen im Vergleich zu Daten-E / A extrem billig. Das Lesen einer einzelnen Variablen aus der Datenbank dauert in den meisten Fällen hunderte Male länger.
quelle