这是我在Unity控制台看到的。
ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。参数名称:index System.Collections.Generic.List1[T].get_Item(System.Int32 index)(at<4ba27aa039714eafa1e8892e51af2932>:0)GameManagerOneHundred.myHandStrength()(at Assets/GameManagerOneHundred.cs:1146)GameManagerOneHundred.smartBot()(at Assets/GameManagerOneHundred.cs:1154)FunctionTimer.Update()(at Assets/FunctionTimer/Scripts/FunctionTimer.cs:76)FunctionTimer+MonoBehaviourHook.Update()(at Assets/FunctionTimer/Scripts/FunctionTimer.cs:53) 有人能破译吗? 我不明白是什么索引出故障了。 什么是
index System.Collections.Generic.List'1[T]? 我可以使用
(at <4ba27aa039714eafa1e8892e51af2932>:0)`进行调试吗?
我正在调试,但我不知道bug在哪里!
1条答案
按热度按时间insrf1ej1#
这里有一个调用堆栈,它列出了代码中的一系列步骤(方法调用其他方法),以达到导致
OutOfRangeException
的有问题的调用。我们来分析一下。首先是冒犯的部分:
这只是表明你的代码中有一个
List<T>
,你试图通过索引访问它的值,但是这个索引不存在。它提到了
get_Item
,因为这是像myList[i]
这样的索引器的调用:myList.get_Item(i)
。所以错误说“嘿,你正在使用的索引无效。有效的索引是0或更大,但不大于最后一个元素的索引”。
这很有用,但还不是很好,因为它没有告诉我们从哪里得到这个值。
它告诉你你试图在
GameManagerOneHundred
脚本中访问该元素。特别是在myHandStrength()
方法中。更详细地说,你在该脚本的第1146行这样做了。很好,现在我们知道该去哪里找了。在某些情况下,这可能是一个方法,你从不同的位置调用,采取不同的步骤来到达那个调用。在这种情况下,查看堆栈的其余部分可能会有所帮助。同样,每个位只是告诉你在哪里进行了调用,以及在哪一行。
所以你的情况是
FunctionTimer.Update()
-〉GameManagerOneHundred.smartBot()
-〉GameManagerOneHundred.myHandStrength()
-〉Item access EXPLOSION
所以现在就看你来检查这个调用是怎么回事了。也许你的列表是空的,而你不希望它是空的?或者也许你试图访问第三个值,而它只有2个。