Tutte le dimensioni iniziali corrispondono a provide a hint to the implementation to have at least a given capacity. Non crea una lista piena di voci di default N
; sottolineatura mia:
Initializes a new instance of the List<T>
class that is empty and has the specified initial capacity.
Se si continua attraverso la voce di MSDN alla sezione Osservazioni, troverete il motivo per cui è previsto questo sovraccarico costruttore (di nuovo, sottolineatura mia):
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>
.
Insomma List<T>.Count
è non uguale a List<T>.Capacity
("Se il conteggio supera la capacità aggiungendo elementi, la capacità aumenta ...").
Si riceve l'eccezione perché la lista unica logicamente contiene gli elementi aggiunti, cambiando la capacità non cambia il numero di elementi logicamente memorizzati. Se si dovesse impostare List<T>.Capacity
a meno di List<T>.Count
possiamo verificare questo comportamento andando nella direzione opposta:
Unhandled Exception: System.ArgumentOutOfRangeException: capacity was less than
the current size.
Parameter name: value
at System.Collections.Generic.List`1.set_Capacity(Int32 value)
Per creare forse il comportamento che stai cercando:
public static List<T> CreateDefaultList<T>(int entries)
{
return new List<T>(new T[entries]);
}
Non è possibile inserire nella posizione 2, se le posizioni 0 e 1 non sono ancora riempiti –
Come sottolineato correttamente, la capacità non è la stessa dimensione . Scrivi il Conteggio alla console prima di chiamare Inserisci, l'elenco ha meno di 3 elementi, quindi l'inserimento di un nuovo valore nella 3a posizione non riesce. –