En regardant les métadonnées de la classe string
, je ne vois que les opérateurs ==
et !=
surchargés. Comment peut-il concaténer l'opérateur '+
'?
Modifier:
Quelques notes intéressantes d'Eric Lippert sur la concaténation de cordes:
Il existe également un superbe article de Joel, mentionné dans la partie 2 ( http://www.joelonsoftware.com/articles/fog0000000319.html ).
Ce n'est pas le cas - le compilateur C # 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 - le montage intervenant a supprimé d'autres bits accidentellement.)
L'avantage du compilateur C # en remarquant qu'il existe plusieurs concaténations de chaînes ici est que vous ne créez pas une chaîne intermédiaire de x + y
qui doit ensuite être copiée à nouveau dans le cadre de la concaténation de (x + y)
et z
. Au lieu de cela, nous faisons tout en une fois.
EDIT: Notez que le compilateur ne peut rien si vous concaténez dans une boucle. Par exemple, ce code:
string x = "";
foreach (string y in strings)
{
x += y;
}
se termine comme équivalent à:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
... donc génère beaucoup de déchets, c'est pourquoi vous devez utiliser un StringBuilder
pour de tels cas. J'ai un article donnant plus de détails sur les deux qui, espérons-le, répondra à d'autres questions.