Ce n'est pas le cas - le compilateur C# le fait :)
Donc ce code :
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
est en fait compilé comme :
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah - un montage intermédiaire a supprimé d'autres parties par accident).
L'avantage du compilateur C#, qui remarque qu'il y a plusieurs concaténations de chaînes ici, est que vous ne finissez pas par créer une chaîne intermédiaire composée de x + y
qui doit ensuite être copié à nouveau comme partie de la concaténation de (x + y)
et z
. Au lieu de cela, nous faisons tout en une seule fois.
EDIT : Notez que le compilateur ne peut pas faire quelque chose si vous concaténer dans une boucle. Par exemple, ce code :
string x = "";
foreach (string y in strings)
{
x += y;
}
finit par être équivalent à :
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... donc ceci fait génèrent beaucoup de déchets, et c'est la raison pour laquelle vous devriez utiliser une StringBuilder
pour de tels cas. J'ai un article plus détaillé sur les deux qui, nous l'espérons, répondra à d'autres questions.