No hace - el compilador de C# hace :)
lo que este código:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
realidad se compila como:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - intervenir editar eliminado accidentalmente otros bits).
El beneficio del compilador de C# al darse cuenta de que hay múltiples concatenaciones de cadenas aquí es que no se termina creando una cadena intermedia de x + y
que luego debe copiarse nuevamente como parte de la concatenación de (x + y)
y z
. En cambio, lo hacemos todo de una vez.
EDITAR: Tenga en cuenta que el compilador no puede hacer cualquier cosa si concatenan en un bucle. Por ejemplo, este código:
string x = "";
foreach (string y in strings)
{
x += y;
}
sólo termina como equivalente a:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... así que esto qué generan una gran cantidad de basura, y es por eso que debe utilizar un StringBuilder
de tales casos. Tengo un article going into more details about the two que con suerte responderá más preguntas.
Buena respuesta; solo una pregunta de seguimiento: si está concatenando cadenas dentro de un bucle, ¿cómo funciona el compilador del operador .Concat cuando no puede saber de antemano qué va a pasar? – frenchie
@frenchie: Se editará para esto. –
¡Ah bien! ¿Y por eso es mejor usar StringBuilder para concatenaciones? – frenchie