Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列出容量属性意外增加。。为什么?_C#_List - Fatal编程技术网

C# 列出容量属性意外增加。。为什么?

C# 列出容量属性意外增加。。为什么?,c#,list,C#,List,我创建了一个列表,例如Customer对象,初始大小为0 List<Customer> firstCustomerList = new List<Customer>(); 现在,列表的输出容量属性是4 客户对象实际上只是一个对象,而不是另一个列表。更重要的是,如果我添加3个Customer对象,然后对列表应用trimOverse()方法,它会将列表缩小到正确的大小 那么,为什么只添加一个对象就可以将列表的容量增加到4呢?容量是实际保存数据的数组的大小计数是列表中的元素数

我创建了一个列表,例如Customer对象,初始大小为0

List<Customer> firstCustomerList = new List<Customer>();
现在,列表的输出容量属性是4

客户对象实际上只是一个对象,而不是另一个列表。更重要的是,如果我添加3个Customer对象,然后对列表应用trimOverse()方法,它会将列表缩小到正确的大小


那么,为什么只添加一个对象就可以将列表的容量增加到4呢?

容量是实际保存数据的数组的大小<代码>计数
是列表中的元素数。

向数组中添加元素是便宜的,只要数组足够大。由于列表不知道它将有多大,因此它必须动态调整数组大小,使其达到
容量
大小。这是非常昂贵的(您必须复制每个元素),因此它将分配比需要更多的资源来限制大小调整操作。

那么,如果不只是1对象,那么数组包含什么?计数为1且容量为4的列表包含:一个大小为4(
容量
)的后备数组,除了您添加的一个元素外,该数组为空,还有一个int指针,告诉列表将下一个元素写入数组的位置。所以本质上,它提前分配内存?
firstCustomerList.Add(customer1);