我有一个名为connectedEntites的通用列表,我在for循环中将项添加到此列表中。我在添加之前进行空检查。但即便如此,每当将项添加到此List<>
时,也会添加空值。我做了调试,但现在可以添加一个空值。由于执行读取操作时该空值,程序崩溃(因为这是一个COM程序)。
以下是班级的代码
public class EntityDetails
{
public ObjectId objId { get; set; }
public Handle objHandle { get; set; }
public string className { get; set; }
public override bool Equals(object obj)
{
if (obj == null) return false;
EntityDetails objAsEntityDetails = obj as EntityDetails;
if (objAsEntityDetails == null) return false;
else return Equals(objAsEntityDetails);
}
public bool Equals(EntityDetails other)
{
if (other == null)
return false;
return (this.objId.Equals(other.objId));
}
}`
下面是您可以看到空值的图像,并且在添加项目时容量也会翻倍,但计数显示正确的值。
答案 0 :(得分:7)
List<>
的内部结构是一个数组,数组具有指定的长度。每次填充时,此数组都需要通过向List<>
添加项目来增长。 Capacity
是内部数组的实际长度,并且在添加后Count
等于当前Capacity
时始终会自动增加。它每次都会翻倍。
如果您的COM应用程序无法处理List<EntityDetails>
的内部结构(即数组)中的空值,则可以使用TrimExcess()
删除这些保留空格。
来自MSDN:
容量始终大于或等于Count。如果计数超过 添加元素时的容量,容量增加了 在复制旧数据之前自动重新分配内部数组 元素和添加新元素。