86 votes

Concaténation de chaînes de caractères à l'aide de l'opérateur '+'.

En regardant le string les métadonnées de la classe, je ne vois que les opérateurs == et != surchargée. Alors comment est-il capable d'effectuer la concaténation pour le ' + opérateur " ?

Modifier :

Quelques notes intéressantes d'Eric Lippert sur la concaténation des chaînes de caractères :

Partie 1

Partie 2

Il y a aussi un super article de Joel référencé dans la partie 2 ( http://www.joelonsoftware.com/articles/fog0000000319.html )

144voto

Jon Skeet Points 692016

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.

8 votes

Bonne réponse ; juste une question complémentaire : si vous concaténiez des chaînes de caractères à l'intérieur d'une boucle, comment le compilateur utilise-t-il l'opérateur .Concat alors qu'il ne peut pas savoir à l'avance ce qui va se trouver dans la boucle.

0 votes

Ah ok ! Et c'est pourquoi il vaut mieux utiliser le StringBuilder pour les concaténations ?

4 votes

@frenchie : C'est pourquoi il est préférable d'utiliser StringBuilder pour répétées concaténation... mais pourquoi cela ne vaut pas la peine pour la concaténation d'un nombre fixe de valeurs .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X