这是我在统一控制台中看到的...
ArgumentOutOfRangeException:索引超出范围。必须是 非负且小于集合的大小。参数名称: index System.Collections.Generic.List`1[T].get_Item (System.Int32 指数)(在<4ba27aa039714eafa1e8892e51af2932>:0) GameManagerOneHundred.myHandStrength () (在 资产/GameManagerOneHundred.cs:1146) GameManagerOneHundred.smartBot () (在 Assets/GameManagerOneHundred.cs:1154) FunctionTimer.Update () (在资产/FunctionTimer/Scripts/FunctionTimer.cs:76) FunctionTimer+MonoBehaviourHook.Update()(at 资产/FunctionTimer/Scripts/FunctionTimer.cs:53)
有人能破译这个吗?
我不明白什么索引出了问题。
到底是什么
index System.Collections.Generic.List'1[T]
?
我可以使用
(at <4ba27aa039714eafa1e8892e51af2932>:0)
以某种方式进行调试吗?
我正在尝试调试,但我不明白错误在哪里!
你有一个调用堆栈。它列出了在您的代码中采取的步骤序列(调用其他方法的方法)以到达导致
OutOfRangeException
. 的有问题的调用
来剖析一下。首先是违规位:
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index System.Collections.Generic.List'1[T].get_Item (System.Int32 index)
这只是表示您的代码中某处有一个
List<T>
,您正试图通过索引从中访问一个值。但是那个索引不存在。
它提到了
get_Item
,因为这是像myList[i]
这样的索引器的调用归结为:myList.get_Item(i)
.
因此错误显示“嘿,您使用的索引无效。有效索引为 0 或更大,但不大于最后一个元素的索引”。
有帮助,但还不是很好,因为这并没有告诉我们我们试图从哪里获得那个价值。不过接下来的一点。
GameManagerOneHundred.myHandStrength () (at Assets/GameManagerOneHundred.cs:1146)
它告诉您您试图访问
GameManagerOneHundred
脚本中的那个元素。特别是在 myHandStrength()
方法中。甚至更详细,您在该脚本的第 1146 行这样做了。
太好了,现在我们知道去哪里找了。在某些情况下,这可能是您从不同位置调用的方法,采取不同的步骤来进行调用。在这种情况下,查看堆栈的其余部分可能会有所帮助。再一次,每一位都只是告诉你在哪里打了电话,以及在哪条线路上。
所以在你的情况下它去了
FunctionTimer.Update()
-> GameManagerOneHundred.smartBot()
-> GameManagerOneHundred.myHandStrength()
-> Item access EXPLOSION
所以现在由你来检查那个电话发生了什么。也许您的列表在您不期望的时候是空的?或者,也许您正在尝试访问只有 2 的第 3 个值。