Конкатенация строк с использованием оператора'+'
смотреть на!--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для таких случаев. У меня есть статья собирается более подробно о двух, который, надеюсь, ответит на дополнительные вопросы.