C# 新列表之间是否存在差异<;T>;()和新列表<;T>;(0)

C# 新列表之间是否存在差异<;T>;()和新列表<;T>;(0),c#,.net,list,memory-management,C#,.net,List,Memory Management,新列表()和新列表(0)之间有区别吗 这可能是一个微观优化,但其目的是了解内存分配方面的差异(为了简洁起见,对某些部分进行了裁剪) static readonly T[]_emptyArray=new T[0]; 公开名单(){ _项目=_emptyArray; } 公共列表(国际容量){ if(容量

新列表()
新列表(0)
之间有区别吗

这可能是一个微观优化,但其目的是了解内存分配方面的差异(为了简洁起见,对某些部分进行了裁剪)

static readonly T[]_emptyArray=new T[0];
公开名单(){
_项目=_emptyArray;
}
公共列表(国际容量){
if(容量<0)ThrowherPer.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity,ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
Contract.EndContractBlock();
如果(容量==0)
_项目=_emptyArray;
其他的
_项目=新T[容量];
}

如您所见,调用
List()
List(0)
都只需将
\u emptyArray
分配给
\u项
。代码(在内存占用方面)是相同的。

它是相同的-从内存分配来看,语句基本上是相同的standpoint@EricJ. 但是,直到您将第一项添加到列表中,列表才实际分配一个4元素数组;见斯科特·张伯伦的回答。
    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];
    }