【问题标题】:Generic list adds null values in c#通用列表在c#中添加空值
【发布时间】:2015-07-31 00:13:40
【问题描述】:

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

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

【问题讨论】:

标签: c# generic-list


【解决方案1】:

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

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

来自MSDN

Capacity 总是大于或等于 Count。如果计数超过 容量增加元素,容量增加 在复制旧数组之前自动重新分配内部数组 元素并添加新元素。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多