不应该存在的索引异常

时间:2019-07-13 19:17:09

标签: c# unity3d

所以e(这不是一个索引超出范围的异常的问题,这就是为什么当Im使用相同的索引和方法,而其他地方对最近的重复标记有响应时,为什么会发生这种特定的变化)

基本上,我正在检查数组中的值是否为Null。但它   当我使用相同的东西时,总是给我一个超出范围的异常   原理   在另一个地区。这可能是一个愚蠢的问题,答案很愚蠢,但我已经   碰到这个问题,我似乎无法解决。

我检查了int的正确性,并且该数组是   正确的大小。

对不起,我没有在这里重点介绍,我不确定如何申请   他们。`错的地方

public void OnDragStop()
  {
     if (SlotHover.name.Contains("Slot"))
     {
        string[] OS = PSlot.name.Split('t');
        int PSN = int.Parse(OS[1]);
        string[] NS = SlotHover.name.Split('t');
        SN = int.Parse(NS[1]);
        Debug.Log(SN);
        if (inventory.Inventoryitems[SN] == null)
        {
             inventory.Inventoryitems[SN] = 
              inventory.Inventoryitems[PSN];
              inventory.Inventoryitems[PSN] = null;
              SlotHover.transform.Find("ItemSlotSprite" + 
SN).GetComponent<Image>().sprite =
              PSlot.transform.Find("ItemSlotSprite" + 
PSN).GetComponent<Image>().sprite;
            PSlot.transform.Find("ItemSlotSprite" + 
SN).GetComponent<Image>().sprite = EmptySprite;
              this.gameObject.transform.position = PP;
        }

    }
}

The Place where its working 

 public void AddItem(Item ItemToAdd)
 {
    for(int i = 0; i < inventory.Inventoryitems.Length; i++)
    {
        if(inventory.Inventoryitems[i] == null)
        {
            inventory.Inventoryitems[i] = item;
            Sprite sprite = ItemToAdd.DefualtSprite;

Inventory.transform.Find("Slot"+i).transform.Find("ItemSlotSprite" + 
i).GetComponent<Image>().sprite = sprite;
            return;
        }
    }
}`

IndexOutOfRange:数组索引超出范围   如上所示,它给了我什么我不确定在这种情况下为什么   它给出了例外。

1 个答案:

答案 0 :(得分:0)

我认为您需要检查库存长度

if(inventory.Inventoryitems.Length >0){
for(int i = 0; i < inventory.Inventoryitems.Length; i++)
    {
        if(inventory.Inventoryitems[i] == null)
        {
            inventory.Inventoryitems[i] = item;
            Sprite sprite = ItemToAdd.DefualtSprite;

Inventory.transform.Find("Slot"+i).transform.Find("ItemSlotSprite" + 
i).GetComponent<Image>().sprite = sprite;
            return;
        }
    }
}