unity3d 数组使用 for removeat 有bug,最后一个删不掉

分类栏目:unity3d教程

119

 unity3d 在使用数组时 发现  用 for 循环 删除  removeat 数组对应元素,到了最后一个会报错?

错误代码如下:

for (int i = 0; i < enemys.Count; i++)

 {
if(enemys[i]==null)
 {
 Debug.Log("删除ID:"+i);
enemys.RemoveAt(i);
Debug.Log("删除后个数:"+enemys.Count);
}
}

这是很多新手会犯的错误,以为使用循环删除对应数组就会让空值的元素都会删除

正确代码如下

List<int> emptyIndex=new List<int>();
 for (int index = 0; index < enemys.Count; index++)
{
 if(enemys[index]==null)
{
emptyIndex.Add(index);
}
}
        
for (int i = 0; i < emptyIndex.Count; i++)
 {
enemys.RemoveAt(emptyIndex[i]-i);
}
必须先建个数组来保存空值的位置,再循环删除空值