SOG-Helpcenter Logo SOG Business - Software

Konkattenieren (Verbinden) von Zeichenketten (Strings)


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.

Zielsetzung


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.

Welche Möglichkeiten gibt es?


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.

Einfaches Beispiel:



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.



String.Join


Ähnlich performant wie Concat wird hier noch die Möglichkeit geboten ein Trennzeichen zwischen den einzelnen Teilstücken zu definieren.

Einfaches Beispiel:




Darüber Hinaus kann String.Join auch benutzt werden um IEnumerables<T> in einen String umzusetzen.



String.Format


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.

Einfaches Beispiel



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.


StringBuilder


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.

Einfaches Beispiel:





Häufige Fehler


String.Format


Hier wird statt String.Concat (+) String.Format verwendet um einfach nur Zeichenketten zu verbinden.

Warum ist das schlecht?


Es wird ein Teilstring benötigt (der Formatstring) welcher auch noch zur Laufzeit analysiert werden muss.

String.Concat


Eine Zeichenkette wird innerhalb einer Wiederholstruktur durch String.Concat verbunden.

Warum ist das schlecht?


Es entsteht pro Wiederholung ein Teilstring

StringBuilder


Es wird String.Format verwendet um einen formatierten String in den StringBuilder einzufügen statt die Funktion AppendFormat zu verwenden.

Warum ist das schlecht?


Es entsteht für diesen Aufruf ein zusätzlicher Teilstring (Rückgabewert von String.Format)