En regardant les métadonnées de la classe de ssortingng
, je ne vois que les opérateurs ==
et !=
Surchargés. Alors, comment est-il capable d’effectuer une concaténation pour l’opérateur ‘ +
‘?
Modifier :
Quelques notes intéressantes d’Eric Lippert sur la concaténation de chaînes:
Partie 1
Partie 2
Il y a aussi un super 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:
ssortingng x = "hello"; ssortingng y = "there"; ssortingng z = "chaps"; ssortingng all = x + y + z;
est en fait compilé en tant que:
ssortingng x = "hello"; ssortingng y = "there"; ssortingng z = "chaps"; ssortingng all = ssortingng.Concat(x, y, z);
(Gah – modification en cours a supprimé les autres bits accidentellement.)
L’avantage du compilateur C # étant qu’il y a plusieurs concaténations de chaînes, c’est que vous ne créez pas une chaîne intermédiaire de x + y
qui doit ensuite être recopiée 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 faire si vous concaténez dans une boucle. Par exemple, ce code:
ssortingng x = ""; foreach (ssortingng y in ssortingngs) { x += y; }
se termine comme équivalent à:
ssortingng x = ""; foreach (ssortingng y in ssortingngs) { x = ssortingng.Concat(x, y); }
… donc cela génère beaucoup de déchets, et c’est pourquoi vous devriez utiliser un SsortingngBuilder
pour de tels cas. J’ai un article contenant plus de détails sur les deux qui, espérons-le, répondront à d’autres questions.
En plus de la réponse principale, j’appendais que les membres au corps d’expression offrent une nouvelle syntaxe raccourcie pour concatter en C # 6 en utilisant $
sign.
Par exemple:
var a = "aaaaa"; var b = "bbbbb"; var c = "ccccc"; var x1 = $"{a}{b}{c}"; var x2 = $"{a} {b} {c}"; var x3 = $"{a}, {b}, {c}";
La sortie sera
x1 : aaaaabbbbbccccc x2 : aaaaa bbbbb ccccc x3 : aaaaa, bbbbb, ccccc
Il est également possible d’implémenter des fonctions comme:
public class Contact { . . . public ssortingng City { get; set; } public int Code { get; set; } . . public ssortingng Location => $"{Code} {City}"; . . }
Et comme exemple
var contact = new Contact(); contact.Code = 2000; contact.City = "Frederiksberg"; Console.WriteLine(contact.Location);
Le résultat pour cela serait:
2000 Frederiksberg