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

我有一个名为connectedEntites的通用列表,我在for循环中将项添加到此列表中.我在添加之前进行空检查.但即便如此,只要将一个项目添加到此列表<>还添加一个空值.我做了调试,但现在可以添加一个空值.由于执行读取操作时该空值,程序崩溃(因为这是一个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));
    }
}`

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

解决方法

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

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

MSDN开始:

Capacity is always greater than or equal to Count. If Count exceeds
Capacity while adding elements,the capacity is increased by
automatically reallocating the internal array before copying the old
elements and adding the new elements.

另见这个问题:List<> Capacity returns more items than added

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...