Unity C# - 数组索引超出范围
Posted
技术标签:
【中文标题】Unity C# - 数组索引超出范围【英文标题】:Unity C# - Array index out of range 【发布时间】:2014-11-25 18:41:16 【问题描述】:我遇到了统一问题,这里是代码
错误信息:
IndexOutOfRangeException: Array index is out of range.
Sequence.fillSequenceArray () (at Assets/Scripts/Sequence.cs:43)
Sequence.Start () (at Assets/Scripts/Sequence.cs:23)
代码:
public int[] colorSequence = new int[100];
public int level = 2;
// Use this for initialization
void Start ()
anim = GetComponent("Animator") as Animator;
fillSequenceArray ();
showArray (); // just to know
// Update is called once per frame
void Update ()
public void showArray()
for (int i = 0; i < colorSequence.Length; i++)
Debug.Log ("Position " + i + ":" + colorSequence[i]);
public void fillSequenceArray()
for (int i = 0; i < level; i++)
int numRandom = Random.Range (0, 3);
if (colorSequence[i] == 0)
colorSequence[i] = numRandom;
我已尝试将最后一个 if
更改为 if (!colorSequence[i].Equals(null))
,或者
if (colorSequence[i] == null)
并发生相同的错误。即使我删除了这个if
,当我尝试填写colorSequence[i] = numRandom;
时也会出现错误
【问题讨论】:
colorSequence
在哪里初始化?
抱歉,已编辑 public int[] colorSequence = new int[100];
是否有可能您在编辑器中修改了“colorSequence”变量?编辑器中更改的值将覆盖代码中初始化的值。
【参考方案1】:
在尝试访问数组之前,您必须检查该数组是否包含该索引处的值。否则会抛出错误而不是返回 null。
您可以使用数组的长度属性轻松检查它:
if (colorSequence.Length > i)
colorSequence[i] = numRandom;
【讨论】:
colorSequence.Length 将返回数组的大小对吗?数组的实例化如下 public int[] colorSequence = new int[100];那么会返回 100 吗? 我不明白为什么会这样 所以,我只想知道数组的位置是否为空,并用随机数填充空位置【参考方案2】:与许多语言不同,当您尝试访问时,C# 不会自动用null
填充超出其边界的数组“槽”。当您第一次声明数组时,您必须明确声明其长度,并且任何超出这些范围的读取或写入尝试都会产生错误。
var colorSequence = new int[length];
如果您想要一个可以在添加或删除项目时动态增长或缩小的列表,您可能需要List<T>
。
【讨论】:
以上是关于Unity C# - 数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章