如何修复索引超出范围。 必须为非负数且小于集合的大小。


我对其进行了编码,以便它显示一张卡片,但它没有,
代码:

   public List<card> displayCard = new List<card>();
    public int displayId;

    public int id;
    public string cardName;
    public int cost;
    public int power;
    public string cardDescription;

    
    public Text nameText;   
    public Text costText;
    public Text powerText;
    public Text descriptionText;
  


    


    // Start is called before the first frame update    
    void Start()
    {
        displayCard[0] = CardDatabase.cardList[displayId];
    }

    // Update is called once per frame
    void Update()
    {
         id = displayCard[0].id;
         cardName = displayCard[0].cardName;
         cost = displayCard[0].cost;
         power = displayCard[0].power;
         cardDescription = displayCard[0].cardDescription;
       

       nameText.text = " " + cardName;
       costText.text = " " + cost;
       powerText.text = " " + power;
       descriptionText.text = " " + cardDescription;
    }
}

I have the cards on a different script

What I have tried:

Changing the card id etc. Rewriting it incase i forgot something, idk what esle to do

解决方案1

这只是您在此处显示的少量代码的猜测。 我假设您的错误发生在方法 Start 中,因为根据您的问题描述,它似乎是第一个调用的方法。 使用调试器并在错误指示行处放置一个断点,以准确查看发生了什么情况。

在代码顶部,您创建了一个新列表(displayCard),它可以容纳一些数字“卡片”对象(默认容量)。 但是,此时它是空的并且里面没有卡片。

在方法 Start(和 Update)中,您尝试使用 displayCard 索引 0 处的卡片对象 – 但其中没有卡片,因此 0 超出范围。 您需要首先将一张卡(添加方法是一种方式)放入列表中。

同样,这只是一个猜测,因为在尝试使用索引 0 之前,我没有看到任何代码将卡对象添加到 displayCard。如果有代码可以执行此操作,请使用调试器来查明发生了什么。 这些调试器是很有价值的工具,是从那些刚开始使用没有调试器的系统的人那里得到的。

解决方案2

只是补充一下 FreedMalloc 所说的,一个数组或 ind3exable 集合,例如 List<T> 含有 N 元素的有效索引值来自 0N - 1
所以一个 List<int> 包含三个值

C#
List<int> myNumbers = new List<int>() {10, 20, 30};

将具有三个有效索引: 0, 1, 和 2 – 任何其他值(正数或负数)都会给您一个“索引超出范围”异常

由于您的代码明确使用了索引 0,并且您会收到超出范围的异常,这意味着您的集合为空:它没有元素,因此它没有有效的索引。

解决方案是添加至少一个 card 来收藏吧!

但是……你的代码看起来真的很混乱:我不知道你显示的代码属于哪个类,但有两种可能性:
1)该代码是 card 班级。 如果是这样,那么它不应该访问显示组件,例如 nameText, costText, powerText, 和 descriptionText 因为它们是您表格的一部分,而不是卡片的一部分。

2) 该代码是您表单的一部分。 如果是这样,那么它不应该具有与卡相关的值,例如 cardName, cost, power, 和 cardDescription 因为它们是个体的一部分 card 并且应该包含在那里而不是重复。

想想你想要做什么:我怀疑你对类和实例以及集合的概念有点模糊! :D

コメント

タイトルとURLをコピーしました