我在C#面试中被问过这个问题,我们可以为一个List实例调用Add或Remove方法多少次?我的答案是int.MaxValue
次,但似乎我错了。
修改:问题与评论中指出的列表大小限制无关,位于this answer。问题是我可以多少次更改列表。
答案 0 :(得分:4)
您可以更改List<T>
实例无限次数以及.net中其他类似的基于数组的结构。是的,你不能添加超过int.MaxValue
值(实际上少一点),但你可以删除和下一次添加你想要的次数,但原因不超过List<T>.Capacity
值{{3可用的内存。
如果要查看List<T>.Add
int MaxArrayLength = 0X7FEFFFFF,您会看到代码version++
,这意味着在添加新元素时会更改列表实例版本。每个列表修改都会发生同样的情况(Add
,Remove
,Insert
等等。但是当版本为int.MaxValue
时,增量运算符version++
将不会抛出异常,因为默认情况下会禁止溢出检查。也许这个事实让你感动int.MaxValue
回答。
此行_items[_size++] = item
也不是问题,因为删除项目时_size会减少。下一行if (_size == _items.Length) EnsureCapacity(_size + 1)
也没有限制。