No lo hace, el compilador de C # lo hace :)
Entonces este código:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
en realidad se compila como:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah, la edición intermedia eliminó otros bits accidentalmente).
El beneficio de que el compilador de C # advierta que hay múltiples concatenaciones de cadenas aquí es que no termina creando una cadena intermedia de la x + y
que luego debe copiarse nuevamente como parte de la concatenación de (x + y)
yz
. En cambio, lo hacemos todo de una vez.
EDITAR: Tenga en cuenta que el compilador no puede hacer nada si concatena en un bucle. Por ejemplo, este código:
string x = "";
foreach (string y in strings)
{
x += y;
}
acaba siendo equivalente a:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... así que esto hace generar una gran cantidad de basura, y es por eso que debe utilizar una StringBuilder
para estos casos. Tengo un artículo con más detalles sobre los dos que, con suerte, responderá a más preguntas.