通用列表在c#中添加空值

时间:2015-05-19 08:56:57

标签: c# generic-list

我有一个名为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));
    }
}`

下面是您可以看到空值的图像,并且在添加项目时容量也会翻倍,但计数显示正确的值。

Generic List in Debug Mode

1 个答案:

答案 0 :(得分:7)

List<>的内部结构是一个数组,数组具有指定的长度。每次填充时,此数组都需要通过向List<>添加项目来增长。 Capacity是内部数组的实际长度,并且在添加后Count等于当前Capacity时始终会自动增加。它每次都会翻倍。

如果您的COM应用程序无法处理List<EntityDetails>的内部结构(即数组)中的空值,则可以使用TrimExcess()删除这些保留空格。

来自MSDN

  

容量始终大于或等于Count。如果计数超过   添加元素时的容量,容量增加了   在复制旧数据之前自动重新分配内部数组   元素和添加新元素。

另请参阅此问题:List<> Capacity returns more items than added