在遍历列表时,我的代码抛出了超出范围的错误,但我不知道为什么。这是我的代码:

        for(int neighborCounter = neighborList.Count - 1; neighborCounter >= 0; neighborCounter--)
        {
            for(int toBeCheckedCounter = toBeChecked.Count - 1; toBeCheckedCounter >= 0; toBeCheckedCounter--)
            {
                Vector2 tile1 = neighborList[neighborCounter];
                Vector2 tile2 = toBeChecked[toBeCheckedCounter];

                if(tile1 == tile2)
                {
                    neighborList.Remove(neighborList[neighborCounter]);
                }
            }
        }


如果你们需要更多背景信息,请告诉我。错误出现在声明tile1的行上。似乎我正在尝试访问neighborList不包含的元素。

最佳答案

您的neighborCounter是一个外循环。如果您从neighborList中移除了足够多的内容,则由于neighborCounter在移动时没有移动,因此toBeCheckedCounter可能会出现一个点,这将触发您的neighborCounter = neighborList.Count

我建议您避免循环或删除foreach。您可以列出要删除的所有项目,然后再进行删除。

if(tile1 == tile2)
{
  itemsToRemove.Add(neighborList[neighborCounter]); // itemsToRemove can be a HashSet
}

关于c# - 收到“ArgumentOutOfRangeException”错误,但不知道如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35545830/

10-11 12:50