Unity3D ArgumentOutOfRangeException:索引超出范围

时间:2019-03-14 16:19:34

标签: c# unity3d

我的代码有问题。当我尝试拾取对象时,编译器会在此行停止。

ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];
  

ArgumentOutOfRangeException:索引超出范围。必须为非负数,并且小于集合的大小。

if ( Input.GetKeyDown (KeyCode.Q))
{
    IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;
    for (int i = 0; i < ekwipunek.ListaNaszychPrzedmiotow.Count; i++)
    {
        if (ekwipunek.ListaNaszychPrzedmiotow[i].id == 0 && DoPodniesienia != null)
        {
            ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];
            Destroy(DoPodniesienia);
            DoPodniesienia = null;
         }
     }
}

1 个答案:

答案 0 :(得分:2)

您的问题很可能存在,因为您在此行上的索引之一引用了超出集合范围的内容。

您正在设置此变量,用作ID的索引。

 IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;

然后,您将进一步引用它,而无需验证它在您的收藏夹中是否可用。

 BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu]

您需要先验证该值或该集合,然后才能访问它。


未来的调试技巧:ArgumentOutOfRangeException

  • 检查您正在使用的任何收藏夹的数量
  • 检查将用于引用集合的任何索引的值

public class YourClass
{
    ...
    Debug.Log($"The collection \"ListaNaszychPrzedmiotow\" is {ListaNaszychPrzedmiotow.Count()}");
    Debug.Log($"The index value of \"i\" is {i}");
    ...
}