C#运行时错误:索引超出范围

时间:2013-05-08 04:49:12

标签: c# runtime-error

我必须制作一个简单的Windows窗体应用程序,其中播放器轮流使用计算机取棒(我用不可见的标签制作),但我遇到了pc的代码问题,因为它导致运行时错误“索引超出范围”,我无法弄清楚..

    private void pcTake(int x)
    {
        textBox1.Text = "I take " + x;
        for (int i = 0; i < labels.Count; i++)
        {
            if (labels[i].Visible == false && labels[i + 1].Visible == true)
            {
                while (x > 0)
                {
                    if (x + i > labels.Count)
                        break;
                    labels[i + x].Visible = false;
                    x--;
                }
                break;
            }
        }

    }

x 是一个随机数, 标签是包含标签的列表

foreach (Control c in this.Controls)
        {
            if (c is Label)
            {
                labels.Add(c);
                c.Enabled = true;
            }
        }

提前致谢

2 个答案:

答案 0 :(得分:4)

由于您的比较,您将获得例外

labels[i + 1].Visible == true

因为您的循环基于< labels.Count,这意味着当循环索引达到count - 1时,您的条件是假设检查count上的数组索引(因为i + 1 }),因为数组的索引是基于0的,所以你得到了异常。

如果你想检查当前索引和后来的索引,那么你的循环条件应该是i < labels.Count - 1,如:

for (int i = 0; i < labels.Count - 1; i++)

答案 1 :(得分:1)

在C#中,数组是0索引的,所以最后一项是labels [labels.Count-1];你应该改变这个

if (x + i > labels.Count)
    break;

进入这个

if (x + i > labels.Count -1)
    break;