加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:24:59 所属栏目:百科 来源:网络整理
导读:我有一个名为connectedEntites的通用列表,我在for循环中将项添加到此列表中.我在添加之前进行空检查.但即便如此,只要将一个项目添加到此列表还添加了一个空值.我做了调试,但现在可以添加一个空值.由于执行读取操作时该空值,程序崩溃(因为这是一个COM程序).
我有一个名为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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读