有没有 new List<T>() 和 new List<T>(0) 之间的区别?

3
有没有new List<T>()new List<T>(0)之间的区别?也许这是一种微观优化,但是思路是为了了解在内存分配方面的差异。

1
http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,55 - SLaks
它是相同的 - https://dev59.com/xFvUa4cB1Zd3GeqPpQRB - Ziv Weissman
从内存分配的角度来看,这些语句本质上是相同的。 - IsakBosman
@EricJ. 但是列表实际上并不分配一个4元素数组,直到你向列表中添加第一个项目;请参见Scott Chamberlain的答案。 - phoog
1个回答

10

这里是实际的源代码(为简洁起见,某些部分已被删减)

    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。从内存占用的角度来看,这两段代码是相同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接