web-dev-qa-db-fra.com

Concaténation de chaînes à l'aide de l'opérateur '+'

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:

Partie 1

Partie 2

Il existe également un superbe article de Joel, mentionné dans la partie 2 ( http://www.joelonsoftware.com/articles/fog0000000319.html ).

83
sidprasher

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.

142
Jon Skeet