Конкатенация строк с использованием оператора'+'


смотреть на!--0--> метаданные класса, я вижу только операторов == и != перегружен. Так как же он может выполнять конкатенацию для ''?

Edit:

некоторые интересные заметки от Эрика Липперта о конкатенации строк:

Часть 1

Часть 2

есть также Супер статья от Джоэла, упомянутая в части 2 (http://www.joelonsoftware.com/articles/fog0000000319.html)

2 80

2 ответа:

это не так - компилятор C# делает :)

так этот код:

string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;

на самом деле компилируется как:

string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);

(gah-intervening edit случайно удалил другие биты.)

преимущество компилятора C#, замечающего, что здесь есть несколько конкатенаций строк, заключается в том, что вы не создаете промежуточную строку x + y который затем должен быть скопирован снова как часть конкатенации (x + y) и z. Вместо этого мы сделать все это за один раз.

EDIT: обратите внимание, что компилятор не могу сделайте что-нибудь, если вы объединяетесь в цикле. Например, этот код:

string x = "";
foreach (string y in strings)
{
    x += y;
}

просто заканчивается как эквивалент:

string x = "";
foreach (string y in strings)
{
    x = string.Concat(x, y);
}

... так это тут генерировать много мусора, и именно поэтому вы должны использовать StringBuilder для таких случаев. У меня есть статья собирается более подробно о двух, который, надеюсь, ответит на дополнительные вопросы.

в дополнение к основному ответу, я бы добавил выражение-bodied члены предлагают ni