Als ik naar de metadata van de klasse string
kijk, zie ik alleen de operators ==
en !=
overbelast. Dus hoe kan het aaneenschakeling uitvoeren voor de operator ‘+
‘?
Bewerken:
Enkele interessante opmerkingen van Eric Lippert over het samenvoegen van snaren:
Er is ook een superartikel van Joel waarnaar in deel 2 wordt verwezen (http://www.joelonsoftware.com/articles/ fog0000000319.html)
Antwoord 1, autoriteit 100%
Dat doet het niet – de C#-compiler wel 🙂
Dus deze code:
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
wordt eigenlijk gecompileerd als:
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah – tussenliggende bewerking heeft per ongeluk andere bits verwijderd.)
Het voordeel van de C#-compiler die opmerkt dat er hier meerdere aaneenschakelingen van tekenreeksen zijn, is dat u uiteindelijk geen tussenliggende reeks van x + y
maakt die vervolgens opnieuw moet worden gekopieerd als onderdeel van de aaneenschakeling van (x + y)
en z
. In plaats daarvan krijgen we alles in één keer gedaan.
EDIT: Merk op dat de compiler nietskan doen als je in een lus samenvoegt. Bijvoorbeeld deze code:
string x = "";
foreach (string y in strings)
{
x += y;
}
wordt gewoon gelijk aan:
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
… dus dit veroorzaaktveel rommel, en daarom zou je voor dergelijke gevallen een StringBuilder
moeten gebruiken. Ik heb een artikel met meer details over de tweedat hopelijk verdere vragen zal beantwoorden .