Warum kann ich der allgemeinen Liste mit dem Indexer keine Elemente hinzufügen?
Hier ist eine seltsame Situation, die ich heute gesehen habe:
Ich habe eine allgemeine Liste und möchte meiner Liste Elemente mit dem folgenden Indexer hinzufügen:
List<string> myList = new List<string>(10);
myList[0] = "bla bla bla...";
Wenn ich das versuche, bekomme ichArgumentOutOfRangeException
Dann habe ich angeschautList<T>
Indexer-Set-Methode, und hier ist es:
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries"), __DynamicallyInvokable]
set
{
if ((uint) index >= (uint) this._size)
ThrowHelper.ThrowArgumentOutOfRangeException(); //here is exception
this._items[index] = value;
++this._version;
}
Und auch angeschautAdd
Methode:
[__DynamicallyInvokable]
public void Add(T item)
{
if (this._size == this._items.Length)
this.EnsureCapacity(this._size + 1);
this._items[this._size++] = item;
++this._version;
}
Nun, wie ich sehe, verwenden beide Methoden den gleichen Weg:
// Add() Method
this._items[this._size++] = item;
// Setter method
this._items[index] = value;
Das_items
ist ein Array vom TypT
:
private T[] _items;
Und im Konstruktor_items
wie folgt initialisiert:
this._items = new T[capacity]
Nach alledem bin ich gespannt, warum ich meiner Liste keine Elemente mit einem Index hinzufügen kann
, obwohl ich die Listenkapazität explizit spezifiziere?