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);
}
必须先建个数组来保存空值的位置,再循环删除空值