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

C#运行时错误:索引超出范围,c#,runtime-error,C#,Runtime Error,我必须制作一个简单的windows窗体应用程序,在该应用程序中,玩家轮流使用电脑取走棍子(我用看不见的标签制作的),但我对电脑的代码有一个问题,因为它会导致运行时错误“索引超出范围”,我无法理解 private void pcTake(int x) { textBox1.Text = "I take " + x; for (int i = 0; i < labels.Count; i++) { if (

我必须制作一个简单的windows窗体应用程序,在该应用程序中,玩家轮流使用电脑取走棍子(我用看不见的标签制作的),但我对电脑的代码有一个问题,因为它会导致运行时错误“索引超出范围”,我无法理解

    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;
            }
        }

    }

提前感谢

由于你的比较,你得到了一个例外

labels[i + 1].Visible == true
由于循环是基于
,这意味着当循环索引达到
Count-1
时,假设您的条件是检查
Count
上的数组索引(因为
i+1
),因为数组的索引是基于0的,所以您将得到异常

如果要检查当前索引和以后的索引,则循环条件应为
i
如:

for (int i = 0; i < labels.Count - 1; i++)
for(int i=0;i
由于你的比较,你得到了一个例外

labels[i + 1].Visible == true
由于循环是基于
,这意味着当循环索引达到
Count-1
时,假设您的条件是检查
Count
上的数组索引(因为
i+1
),因为数组的索引是基于0的,所以您将得到异常

如果要检查当前索引和以后的索引,则循环条件应为
i
如:

for (int i = 0; i < labels.Count - 1; i++)
for(int i=0;i
在C#中,数组是0索引的,因此最后一项是labels[labels.Count-1];你应该改变这个

if (x + i > labels.Count)
    break;
进入这个

if (x + i > labels.Count -1)
    break;
在C#中,数组是0索引的,因此最后一项是labels[labels.Count-1];你应该改变这个

if (x + i > labels.Count)
    break;
进入这个

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

您是否设置了断点,跟踪了i和x的值,并找出了哪行代码出错了?排除此错误的第一步是了解正在访问的数组索引以及数组的长度。有关断点的信息,请参阅是否设置了断点,跟踪i和x的值,并找出哪行代码出错?排除此错误的第一步是了解正在访问的数组索引以及数组的长度。有关断点的信息,请参阅…我真的很愚蠢,没有看到这一点,谢谢;现在又出现了另一个问题,本应消失的标签不会消失。。有什么想法吗?…我真的很愚蠢,没有看到,谢谢;现在又出现了另一个问题,本应消失的标签不会消失。。有什么想法吗?