Aaneenschakeling van tekenreeksen met operator ‘+’

Als ik naar de metadata van de klasse stringkijk, 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:

Deel 1

Deel 2

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 + ymaakt 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 StringBuildermoeten gebruiken. Ik heb een artikel met meer details over de tweedat hopelijk verdere vragen zal beantwoorden .

Other episodes