Das richtige Konkattenieren von Zeichenketten spielt in CSharp eine wichtige Rolle, denn es kann viel falsch gemacht werden, was wiederum Auswirkungen auf die Performance und Lesbarkeit des Quellodes hat.
Grundsätzlich sollte neben der Lesbarkeit auch die Performance im Auge behalten werden, deshalb ist es wichtig die Bildung von Teilzeichenketten zu vermeiden bzw. zu minimieren. Diese bleiben nämlich über die Laufzeit des Programmes im Arbeitsspeicher.
Es ist also ratsam mehrere Einzelanweisungen zu einer zusammen zu fassen bzw. in Wiederholstrukturen oder langen Anwerisungen einen StringBuilder zu verwenden.
String.Concat oder auch der + Operator
Dies ist der effizienteste und auch gleichzeitig einfachste Weg Zeichenketten miteinander zu Verbinden. In Sachen Performance ist er unübertroffen und sollte in der Regel die erste Wahl sein.
Die Anweisung mit dem + Operator wird vom Compiler durch den Aufruf String.Concat ersetzt, von daher sind diese beiden Ausdrücke äquivalent.
Darüber Hinaus kann String.Concat auch benutzt werden um IEnumerables<T> in einen String umzusetzen.
Ähnlich performant wie Concat wird hier noch die Möglichkeit geboten ein Trennzeichen zwischen den einzelnen Teilstücken zu definieren.
Darüber Hinaus kann String.Join auch benutzt werden um IEnumerables<T> in einen String umzusetzen.
Funktion zum Verbinden von Argumenten durch die Angabe eines Formates. Wird oft fälschlicher Weise anstelle von Concat verwendet. Hierbei entsteht immer eine zusätzliche Teilzeichenkette (der Formatstring) die außerdem zur Laufzeit untersucht werden muss. Daher sollte man String.Format bzw. seit CSharp 6.0 auch Interpolation nur dann verwenden, wenn man auch wirklich etwas formatieren will oder aber es der Lesbarkeit dienlich ist.
Die Zweite Anweisung mit dem $ Operator wird Stringinterpolation genannt und wird vom Compiler durch den Aufruf von String.Format ersetzt. Von daher sind diese beiden Ausdrücke äquivalent.
Der StringBuilder ist im Grunde die Basisklasse auf der alle Verbindungsfunktionen aufbauen. Er stellt sicher das die einzelnen Teilstring die ihm als Argumente übergeben werden erst dann zu einer neuen Zeichenkette werden, wenn ToString aufgerufen wird. Dies reduziert somit die Bildung von Teilzeichenketten auf ein Minimum und daher muss man den StringBuilder in Wiederholstrukturen verwenden.
Hier wird statt String.Concat (+) String.Format verwendet um einfach nur Zeichenketten zu verbinden.
Es wird ein Teilstring benötigt (der Formatstring) welcher auch noch zur Laufzeit analysiert werden muss.
Eine Zeichenkette wird innerhalb einer Wiederholstruktur durch String.Concat verbunden.
Es entsteht pro Wiederholung ein Teilstring
Es wird String.Format verwendet um einen formatierten String in den StringBuilder einzufügen statt die Funktion AppendFormat zu verwenden.
Es entsteht für diesen Aufruf ein zusätzlicher Teilstring (Rückgabewert von String.Format)