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 - modification intermédiaire supprimée accidentellement d'autres bits.)
L'avantage du compilateur C # remarquant qu'il existe plusieurs concaténations de chaînes ici est que vous ne finissez pas par créer une chaîne intermédiaire x + y
dont il faut ensuite copier à nouveau dans le cadre de la concaténation de (x + y)
et z
. Au lieu de cela, nous faisons tout cela en une seule fois.
EDIT: Notez que le compilateur ne peut rien faire si vous concaténez dans une boucle. Par exemple, ce code:
string x = "";
foreach (string y in strings)
{
x += y;
}
finit juste comme équivalent à:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... donc cela ne générer beaucoup d'ordures, et il est la raison pour laquelle vous devez utiliser un StringBuilder
pour de tels cas. J'ai un article qui donne plus de détails sur les deux qui, espérons-le, répondra à d'autres questions.
string.Concat
etstring.Join
présentent de nombreuses surcharges, dont certaines prennent uneIEnumerable<>
instance. Ils sont donc plus pratiques à utiliser dans la plupart des cas qu'à utiliser aStringBuilder
(je ne sais pas si ces méthodes utilisent un enStringBuilder
interne, je dis juste qu'elles sont plus pratiques dans la plupart des cas).