Das tut es nicht - der C # -Compiler tut es :)
Also dieser Code:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
wird tatsächlich kompiliert als:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - intervenierende Bearbeitung hat versehentlich andere Bits entfernt.)
Der Vorteil des C # -Compilers, der feststellt, dass es hier mehrere Zeichenfolgenverkettungen gibt, besteht darin, dass Sie am Ende keine Zwischenzeichenfolge erstellen, x + y
die dann im Rahmen der Verkettung von (x + y)
und erneut kopiert werden muss z
. Stattdessen erledigen wir alles auf einmal.
BEARBEITEN: Beachten Sie, dass der Compiler nichts tun kann, wenn Sie in einer Schleife verketten. Zum Beispiel dieser Code:
string x = "";
foreach (string y in strings)
{
x += y;
}
endet nur als äquivalent zu:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... das erzeugt also viel Müll, und deshalb sollten Sie in StringBuilder
solchen Fällen ein verwenden. Ich habe einen Artikel, der ausführlicher auf die beiden eingeht und hoffentlich weitere Fragen beantwortet.
string.Concat
und heutzutagestring.Join
viele Überladungen aufweisen, einschließlich einigerIEnumerable<>
Instanzen in einer Instanz. Daher sind sie in den meisten Fällen bequemer zu verwenden als aStringBuilder
(ich weiß nicht, ob diese MethodenStringBuilder
intern eine verwenden, ich sage nur, dass sie in den meisten Fällen bequemer sind).