新List <t>()和新List <t>(0)之间有区别吗

时间:2015-06-16 21:54:59

标签: c# .net list memory-management

new List<T>()new List<T>(0)之间是否存在差异?

可能这是一个微优化,但其目的是忽略内存分配的差异。

1 个答案:

答案 0 :(得分:10)

Here is the actual source code(为简洁而修剪了一些部分)

    static readonly T[]  _emptyArray = new T[0];  

    public List() {
        _items = _emptyArray;
    }

    public List(int capacity) {
        if (capacity < 0) ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
        Contract.EndContractBlock();

        if (capacity == 0)
            _items = _emptyArray;
        else
            _items = new T[capacity];
    }

正如您所看到的那样,调用List()List(0)只会将_emptyArray分配给_items。代码(就内存占用而言)是相同的。