Patrząc na implementację List.AddRange znalazłem coś dziwnego, którego nie rozumiem. Sourcecode, see line 727 (AddRange wzywa InsertRange)Listę <T> .AddRange/InsertRange tworzenie tymczasowej tablicy
T[] itemsToInsert = new T[count];
c.CopyTo(itemsToInsert, 0);
itemsToInsert.CopyTo(_items, index);
Dlaczego czynisz to Skopiuj kolekcji w "Temp-tablicy" (itemsToInsert), a następnie kopiuje tablicy temp do rzeczywistego _items-tablicy? Czy istnieje jakikolwiek powód tego, lub jest to tylko niektóre z pozostałości kopiowania źródła ArrayList, ponieważ to samo dzieje się tam.
Założę się, że należy przekazywać elementy przez wartość zamiast przez odniesienie, tak aby wstawiane oryginalne elementy nie były modyfikowane w przypadku, gdy same elementy na liście zostały zmodyfikowane. –
@Jdsfighter - Nie rozumiem, jak to pomaga w ogóle. Zawartość tablicy lub kolekcji to wartości lub odwołania. Powyższy kod nie zmienia charakteru kopiowanych treści. –
Naprawdę nie sądzę, że chodzi o ukrywanie podstawowej tablicy. W mojej odpowiedzi wskazałem inne prawdopodobne wyjaśnienie. – Fabjan