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

San*_*osh 3 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));
    }
}`
Run Code Online (Sandbox Code Playgroud)

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

调试模式下的通用列表

pyr*_*lus 7

a的内部结构List<>是一个数组,数组具有指定的长度.每次填充时都需要增加此数组,方法是将项目添加到List<>.它Capacity是内部数组的实际长度,并且在Count后加法等于当前时总是自动增加Capacity.它每次都会翻倍.

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

来自MSDN:

容量始终大于或等于Count.如果Count在添加元素时超出容量,则在复制旧元素和添加新元素之前,通过自动重新分配内部数组来增加容量.

另请参阅此问题:列表<>容量返回的项目多于添加的项目