Bei den Metadaten der Klasse string
sehe ich nur die Operatoren ==
und !=
überladen. Wie kann es also eine Verkettung für den Operator "+
" durchführen?
Bearbeiten:
Einige interessante Anmerkungen von Eric Lippert zur String-Verkettung:
Es gibt auch einen Superartikel von Joel, auf den in Teil 2 verwiesen wird ( http://www.joelonsoftware.com/articles/fog0000000319.html ).
Ist 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 eigentlich 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 String-Verkettungen gibt, ist, dass Sie am Ende keine Zwischenzeichenfolge von x + y
erstellen, die dann als Teil der Verkettung von (x + y)
und z
erneut kopiert werden muss. Stattdessen erledigen wir alles auf einmal.
EDIT: Beachten Sie, dass der Compiler kann nicht irgendetwas tun, 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);
}
... so erzeugt dieses tut eine Menge Müll, weshalb Sie für solche Fälle eine StringBuilder
verwenden sollten. Ich habe einen Artikel, der detailliertere Informationen zu den beiden enthält , der hoffentlich weitere Fragen beantworten wird.