Cały początkowy rozmiar to provide a hint to the implementation to have at least a given capacity. Nie tworzy listy wypełnionej domyślnymi wpisami N
; Kopalnia nacisk:
Initializes a new instance of the List<T>
class that is empty and has the specified initial capacity.
Jeśli nadal poprzez wejścia MSDN do sekcji Uwagi, przekonasz się dlaczego to przeciążenie konstruktora jest (ponownie, moje podkreślenie):
The capacity of a List<T>
is the number of elements that the List<T>
can hold. As elements are added to a List<T>
, the capacity is automatically increased as required by reallocating the internal array.
If the size of the collection can be estimated, specifying the initial capacity eliminates the need to perform a number of resizing operations while adding elements to the List<T>
.
W krótkim List<T>.Count
jest nie jest taki sam jak List<T>.Capacity
("Jeśli liczba przekracza pojemność podczas dodawania elementów, zwiększa się pojemność ...").
pojawić się wyjątek, ponieważ lista tylko logicznie zawiera elementy, które dodają, zmieniając pojemność nie zmienia liczbę elementów logicznie przechowywanych. Jeśli było ustawić List<T>.Capacity
do mniej niż List<T>.Count
możemy przetestować to zachowanie będzie inny kierunek
Unhandled Exception: System.ArgumentOutOfRangeException: capacity was less than
the current size.
Parameter name: value
at System.Collections.Generic.List`1.set_Capacity(Int32 value)
Aby utworzyć zachowanie może szukasz:
public static List<T> CreateDefaultList<T>(int entries)
{
return new List<T>(new T[entries]);
}
Nie można wstawić w pozycji 2, jeśli pozycje 0 i 1 nie są jeszcze wypełnione –
Jak słusznie wskazał, pojemność nie jest taki sam jak rozmiar . Napisz Count do konsoli przed wywołaniem Insert, lista zawiera mniej niż 3 elementy, więc wstawienie nowej wartości na trzecią pozycję kończy się niepowodzeniem. –