我有清单List <Bitmap> memory = new List<Bitmap>();.我使用此列表在用于处理图像的简单程序中保存图像状态.我想实现前后操作,它将在保存在内存中的状态之间进行迭代(=保存在列表内存中).
内存将只有一个有限的范围,例如20个状态,这意味着当我将对图像进行20次修改并且我执行21时,我将删除第一个状态.可能是通过操作memory.RemoveAt(0);.然后列表会发生什么?我需要的列表包含-1项而不是上一个列表并且具有移位索引.
我有列表list.Count = 20,我删除第一项,我想要list.Count = 19和转移索引 - 类似于修剪自由空间,所以原始列表的索引1现在将具有索引0而原始索引的索引2将具有索引1等.我找到了一个方法列表TrimExcess,它会做我想要的,但我不确定.
当我有19个列表时,我可以将新状态保存到最后一个位置Add(),所以我将再次列出20个.
Tho*_*mar 13
不要将a List与数组混淆.数组具有固定位置和固定大小,而列表则没有.
对于数组,没有"添加"或"删除"项目.数组始终具有创建时指定的长度.
列表的长度是动态的.您添加项目,列表增长.您删除项目,列表缩小.如果将项添加到列表中,则该项始终附加到列表中(您可以调用Insert以在指定位置插入).
但是,在任何给定时间,列表中的条目将具有从0开始的索引Count-1(范围为"基于零").即使您删除列表中间位置X"处的项目",该索引处也会有一个项目(之前位于X + 1位置的项目).
简介:您在"我需要的内容"段落中描述的内容是自动完成的,代码中没有任何进一步的操作.
关于TrimExcess方法:列表具有Count(列表中的元素的实际数量)和a Capacity(列表可以采用的内部元素数量,而无需调整其内部结构的大小).该Capacity可以比更大Count.这是因为内部列表将其项存储在数据结构中,需要在添加/删除时重新组织.
为了节省添加时间,Capacity增加了更大的步骤.例如,当您将项添加到已满的列表时,会在内部创建4个新"位置",以便连续添加不会导致过多的开销.
什么TrimExcess是重新组织列表的内部数据结构,以便Capacity匹配Count.这需要花费更多时间,列表中的项目越多,因此TrimExcess只有在您确定不再需要添加/删除任何元素时才应调用它们.
在你的情况下:放弃TrimExcess方法.
Capacity不限制列表的大小!在C#中,没有选项可以创建一个最多需要X个元素的列表.你必须自己做.