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.