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.
string.Concat
ystring.Join
tienen muchas sobrecargas, incluidas algunas que toman unaIEnumerable<>
instancia. Por lo tanto, son más convenientes de usar en la mayoría de los casos que usar unStringBuilder
(no sé si estos métodos usan unStringBuilder
internamente, solo digo que son más convenientes en la mayoría de los casos).