Unity中访问List出现Argument is out of Range错误求助
解决索引越界错误:你的列表是空的!
嘿,我一眼就揪出问题所在了——你遇到的Argument is out of Range错误,核心原因是你创建了List<gridCell>但完全没往里面添加任何元素,空列表里根本没有cells[0]这个元素,自然会触发索引越界的报错。
咱们来拆解代码里的两个关键问题:
问题1:循环没给列表添加元素
你写了一个跑288次的循环,但循环里只做了int theX = i;——这行代码除了定义一个局部变量啥也没干,既没创建gridCell实例,也没把任何对象加到cells列表里,最后列表还是空的。
问题2:构造函数赋值逻辑错误
你的gridCell构造函数里写了this.theX = theX;,这相当于把属性赋值给自己,完全没用到传入的xAx参数,这会导致theX永远是默认的0,逻辑完全走偏了。
修正后的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class mapArray : MonoBehaviour { public class gridCell { public int theX { get; set; } // 修正构造函数:用传入的xAx参数给theX赋值 public gridCell(int xAx, int yAx, int TRVpen, int Ele, bool isOccupied) { this.theX = xAx; // 如果你需要用到其他参数,记得在这里给对应的属性赋值哦 } } public void Start() { List<gridCell> cells = new List<gridCell>(); for (int i = 0; i < 288; i++) { // 创建gridCell实例,传入必要参数(其他参数我用了占位值,你可以按需修改) gridCell newCell = new gridCell(i, 0, 0, 0, false); // 把新实例添加到列表中 cells.Add(newCell); } // 现在列表有元素了,访问cells[0]就不会报错了 int theXvalue = cells[0].theX; Debug.Log(theXvalue); // 这里会打印0,因为第一个循环的i是0 } public void Update () { } }
额外小提示
- 如果你不需要构造函数里的
yAx、TRVpen等参数,可以直接简化构造函数,只保留你需要的参数,避免传入无用的占位值。 - 以后再遇到索引越界错误,第一时间检查列表/数组是否为空,或者索引是否超过了元素的实际数量。
内容的提问来源于stack exchange,提问作者Derek Sizemore
相关产品推荐
相关产品推荐

