System.Collections.Generic.List <t>可以在.net中更改多少次?

时间:2017-12-16 00:28:48

标签: c# .net

我在C#面试中被问过这个问题,我们可以为一个List实例调用Add或Remove方法多少次?我的答案是int.MaxValue次,但似乎我错了。

修改:问题与评论中指出的列表大小限制无关,位于this answer。问题是我可以多少次更改列表。

1 个答案:

答案 0 :(得分:4)

您可以更改List<T>实例无限次数以及.net中其他类似的基于数组的结构。是的,你不能添加超过int.MaxValue值(实际上少一点),但你可以删除和下一次添加你想要的次数,但原因不超过List<T>.Capacity值{{3可用的内存。

如果要查看List<T>.Add int MaxArrayLength = 0X7FEFFFFF,您会看到代码version++,这意味着在添加新元素时会更改列表实例版本。每个列表修改都会发生同样的情况(AddRemoveInsert等等。但是当版本为int.MaxValue时,增量运算符version++将不会抛出异常,因为默认情况下会禁止溢出检查。也许这个事实让你感动int.MaxValue回答。

此行_items[_size++] = item也不是问题,因为删除项目时_size会减少。下一行if (_size == _items.Length) EnsureCapacity(_size + 1)也没有限制。