为什么c# List实现在ensure capacity方法中指定了这个精确的值?

本文关键字:实现 List ensure 方法 capacity 为什么 | 更新日期: 2023-09-27 17:49:18

使用ILspy代码为:

private void EnsureCapacity(int min)
{
if (this._items.Length < min)
{
    int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
    if (num > 2146435071)
    {
        num = 2146435071;
    }
    if (num < min)
    {
        num = min;
    }
    this.Capacity = num;
}
}

为什么要检查num是否大于2146435071,为什么不直接检查下流&设置num = Int。最大值还是其他大于最小的值?

为什么c# List实现在ensure capacity方法中指定了这个精确的值?

这与List<T>使用数组作为内部存储,并且最大数组大小设置为2146435071有关。

Read . net中64位Windows下array的最大长度是多少

你可以很容易地创建自己的IList<T>实现,它将不使用数组作为内部存储,并允许超过2146435071元素。当然,您仍然受到int.MaxValue作为最大元素数的限制,因为IList<T>.Count返回int