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

Глядя на метаданные класса string, я вижу только перегруженные операторы == и !=. Итак, как он может выполнять конкатенацию для оператора +?

Edit

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

Часть 1

Часть 2

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

Вам также может понравиться

About the Author: qw

1 комментарий

  1. Это не так: компилятор С# делает:)

    Итак, этот код:

    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 — промежуточное редактирование случайно удалило другие разряды.)

    Преимущество компилятора С#, замечающего, что здесь есть несколько конкатенаций строк, заключается в том, что вы не создаете промежуточную строку 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 для таких случаев. У меня есть статья в которой мы подробно расскажем об этих двух, которые, надеюсь, ответят на другие вопросы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *