如何在C#中实现List.Clear()?

Vic*_*cky 13 .net c# memory arrays list

我假设它使用数组来实现List.如何List.Clear()实施?它实际上是清理数组还是只为这个列表创建一个新数组?

public class List {

    private Array _array;

    public void Clear1 () {
        _array.length = 0;
    }
    public void Clear2 () {
        _array = new Array();
    }
}
Run Code Online (Sandbox Code Playgroud)

Str*_*ior 15

像这样(使用.NET Reflector):

public void Clear()
{
    if (this._size > 0)
    {
        Array.Clear(this._items, 0, this._size);
        this._size = 0;
    }
    this._version++;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它只是清除相同的数组.它可能假定如果您重复使用相同的列表,您可能希望使用大致相同数量的数据重新填充它.如果要释放阵列,则需要创建新的List实例.


T.K*_*.K. 13

MSDN:

Count设置为0,并且还会释放对集合元素中其他对象的引用.

容量保持不变.要重置List的容量,请调用TrimExcess方法或直接设置Capacity属性.减小容量会重新分配内存并复制List中的所有元素.修剪空列表会将列表的容量设置为默认容量.

该方法是O(n)操作,其中n是Count.


Ani*_*Ani 7

从.NET 4.0开始,它执行以下操作:

  1. 通过Array.Clear呼叫将支持阵列归零.这有效地使其成为O(n)操作.
  2. 将大小设置为0.
  3. 递增内部版本号,以便主动普查员将抛出InvalidOperationExceptions,如果MoveNext叫他们.