String Concatenation using '+' operator
.net, c#, string
Solution
It doesn't - the C# compiler does :)
So this code:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
actually gets compiled as:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - intervening edit removed other bits accidentally.)
The benefit of the C# compiler noticing that there are multiple string concatenations here is that you don't end up creating an intermediate string of `x + y` which then needs to be copied again as part of the concatenation of `(x + y)` and `z`. Instead, we get it all done in one go.
EDIT: Note that the compiler can't do anything if you concatenate in a loop. For example, this code:
string x = "";
foreach (string y in strings)
{
x += y;
}
just ends up as equivalent to:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... so this does generate a lot of garbage, and it's why you should use a `StringBuilder` for such cases. I have an article going into more details about the two which will hopefully answer further questions.
Problem
Looking at the `string` class metadata, I only see the operators `==` and `!=` overloaded. So how is it able to perform concatenation for the '`+`' operator? Edit: Some interesting notes from Eric Lippert on string concatenation: Part 1 Part 2 There is also a super article from Joel referred in part 2 (http://www.joelonsoftware.com/articles/fog0000000319.html)