wake-up-neo.net

String-Verkettung mit '+' - Operator

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:

Teil 1

Teil 2

Es gibt auch einen Superartikel von Joel, auf den in Teil 2 verwiesen wird ( http://www.joelonsoftware.com/articles/fog0000000319.html ).

83
sidprasher

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.

138
Jon Skeet