我今天遇到了一个奇怪的情况:
我有一个通用列表,我想使用它的索引器向列表中添加项,就像这样:
List<string> myList = new List<string>(10);
myList[0] = "bla bla bla...";
当我尝试这样做时,我得到了“ArgumentOutOfRangeException”的错误。
然后我查看了List索引器设置方法,它是这样的:
[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;
}
同时也看一下Add
方法:
[__DynamicallyInvokable]
public void Add(T item)
{
if (this._size == this._items.Length)
this.EnsureCapacity(this._size + 1);
this._items[this._size++] = item;
++this._version;
}
现在,我看到两种方法都使用了相同的方式:
// Add() Method
this._items[this._size++] = item;
// Setter method
this._items[index] = value;
_items
是类型为 T
的数组:
private T[] _items;
在构造函数中,_items
被初始化为:
this._items = new T[capacity]
现在,经过这些操作之后,我很好奇为什么我无法按索引将项目添加到列表中,尽管我明确指定了列表容量?