通用列表在 C# 中添加空值
Generic list adds null values in c#
我有一个名为 connectedEntites 的通用列表,我在 for 循环中将项目添加到该列表。我在添加之前做了一个空检查。但即便如此,每当向此 List<>
添加一个项目时,也会添加一个空值。我进行了调试,但无法添加空值。由于这个空值,当我执行读取操作时程序崩溃(因为这是一个 COM 程序)。
下面是 class
的代码
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<>
的内部结构是一个数组,数组有指定的长度。每次您通过向 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
我有一个名为 connectedEntites 的通用列表,我在 for 循环中将项目添加到该列表。我在添加之前做了一个空检查。但即便如此,每当向此 List<>
添加一个项目时,也会添加一个空值。我进行了调试,但无法添加空值。由于这个空值,当我执行读取操作时程序崩溃(因为这是一个 COM 程序)。
下面是 class
的代码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<>
的内部结构是一个数组,数组有指定的长度。每次您通过向 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