Рассматривая реализацию List.AddRange, я нашел что-то странное, я не понимаю. Sourcecode, see line 727 (AddRange называет InsertRange)Список <T> .AddRange/InsertRange создание временного массива
T[] itemsToInsert = new T[count];
c.CopyTo(itemsToInsert, 0);
itemsToInsert.CopyTo(_items, index);
Почему это делаешь Скопируйте коллекцию в «ТЕМП-массив» (itemsToInsert) первый и затем копирует временный массив в фактическую _items массива? Есть ли причина в этом, или это просто некоторая проблема с копированием источника ArrayList, потому что там происходит то же самое.
Я бы предположил, что передать элементы через значение вместо ссылки, чтобы исходные элементы, вставленные, не были изменены в случае изменения элементов в списке. –
@Jdsfighter - я не вижу, как это помогает вообще. Содержимое массива или коллекции - это значения или ссылки. Вышеприведенный код ничего не меняет, чем он копируется. –
На самом деле я не думаю, что это скрыть базовый массив. В моем ответе я указал другое вероятное объяснение. – Fabjan