Конкатенация строк с использованием оператора'+'
смотреть на!--0--> метаданные класса, я вижу только операторов ==
и !=
перегружен. Так как же он может выполнять конкатенацию для ''?
Edit:
некоторые интересные заметки от Эрика Липперта о конкатенации строк:
есть также Супер статья от Джоэла, упомянутая в части 2 (http://www.joelonsoftware.com/articles/fog0000000319.html)
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
для таких случаев. У меня есть статья собирается более подробно о двух, который, надеюсь, ответит на дополнительные вопросы.