gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:09:15 25 4
gpt4 key购买 nike

我有一个名为 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

最佳答案

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

如果您的 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

关于c# - 通用列表在 C# 中添加空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com