it-swarm.com.de

Mehrzeiliger String mit hinzugefügtem Text aus Variablen

Mir ist bewusst, dass dies funktionieren wird:

string multiline_text = @"this is a multiline text
this is line 1
this is line 2
this is line 3";

Wie kann ich folgende Arbeit machen:

string a1 = " line number one";
string a2 = " line number two";
string a3 = " line number three";

string multiline_text = @"this is a multiline text
this is " + a1 + " 
this is " + a2 + " 
this is " + a3 + ";

Ist es möglich, den String in mehrere Teilstrings aufzuteilen, einen für jede Zeile?

19
enb081

Eine Möglichkeit ist, stattdessen die String-Formatierung zu verwenden. Vor C # 6:

string pattern = @"this is a multiline text
this is {0}
this is {1}
this is {2}";

string result = string.Format(pattern, a1, a2, a3);

Mit C # 6 können Sie ein interpoliertes wörtliches Stringliteral verwenden:

string pattern = [email protected]"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";

Beachten Sie, dass [email protected] genau das sein muss - wenn Sie versuchen, @$ zu verwenden, wird es nicht kompiliert.

55
Jon Skeet

Mit der StringBuilder-Klasse können Sie die Lesbarkeit folgendermaßen verbessern:

StringBuilder sb = new StringBuilder();
sb.AppendLine("this is a multiline");
sb.AppendLine("this is " + a1); // etc

var result = sb.ToString();
5
Chris Dixon

Obwohl string.Format eine bessere Übung ist, fügen Sie am Ende jeder Zeile den zusätzlichen @s hinzu, um das zu erreichen, was Sie erreichen wollen:

string multiline_text = @"this is a multiline text
this is " + a1 + @" 
this is " + a2 + @" 
this is " + a3 + @"";

Ihnen fehlte auch ein letzter " vor dem Semikolon.

5
mattytommo

Mit Visual Studio 2015 können Sie schreiben:

string multiline_text = [email protected]"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";

String.Format wird vom Compiler verwendet (wie in Jons answer), es ist jedoch einfacher zu lesen.

3

Aus irgendeinem Grund unterstützt c # keinen solchen mehrzeiligen Text. die nächste, die Sie bekommen werden, ist:

string a1 = " line number one";
string a2 = " line number two";
string a3 = " line number three";

string multiline_text = @"this is a multiline text" +
"this is " + a1 +
"this is " + a2 +
"this is " + a3;
1
Sam I am

Zum Spaß können Sie auch eine Array-Join-Technik verwenden, um etwas lesbares zu erhalten und das Einrücken zu steuern. Manchmal ist die mehrzeilige Vorlage, die Sie zwingt, vollständig nach links auszurichten, unansehnlich ... 

string a1 = "London", a2 = "France", a3 = "someone's underpants";

string result = string.Join(Environment.NewLine, new[] {
    $"this is {a1}", // interpolated strings look Nice
    "this is " + a2, // you can concat if you can't interpolate
    $"this is {a3}"  // these in-line comments can be Nice too
});

wenn Sie formatieren müssen, wickeln Sie den Join für ein aufgeräumtes Ergebnis anstelle von einzelnen Zeilen ein.

0
Dennis Allen