我有一个名为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));
}
}`
Run Code Online (Sandbox Code Playgroud)
下面是您可以看到空值的图像,并且在添加项目时容量也会翻倍,但计数显示正确的值.

a的内部结构List<>是一个数组,数组具有指定的长度.每次填充时都需要增加此数组,方法是将项目添加到List<>.它Capacity是内部数组的实际长度,并且在Count后加法等于当前时总是自动增加Capacity.它每次都会翻倍.
如果您的COM应用程序无法处理内部结构(即数组)中的空值,List<EntityDetails>您可以使用它TrimExcess()来删除那些保留空格.
来自MSDN:
容量始终大于或等于Count.如果Count在添加元素时超出容量,则在复制旧元素和添加新元素之前,通过自动重新分配内部数组来增加容量.
另请参阅此问题:列表<>容量返回的项目多于添加的项目
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |