You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:35