【发布时间】:2013-12-30 13:29:45
【问题描述】:
这是我今天看到的一个奇怪的情况:
我有一个通用列表,我想使用它的索引器将项目添加到我的列表中:
List<string> myList = new List<string>(10);
myList[0] = "bla bla bla...";
当我尝试这个时,我得到ArgumentOutOfRangeException
然后我查看了List<T> indexer set 方法,这里是:
[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]
现在,在所有这些之后,我很好奇为什么我不能用索引将项目添加到我的列表中
,虽然我明确指定列表容量?
【问题讨论】:
-
索引器不添加项目。您有一个空列表,并且您正在尝试访问(不存在的)第一项