IndexOutOfRangeException - Windows Phone(C#)

时间:2012-04-10 10:04:19

标签: c# windows-phone-7.1

我也熟悉Windows Phone和C#。我发现有一个 我的Coloring()函数中的IndexOutOfRangeException:

public void Coloring()
    {
        szinek_base.Add(Color.FromArgb(255, 0, 171, 169));
        szinek_base.Add(Color.FromArgb(255, 140, 191, 38));
        szinek_base.Add(Color.FromArgb(255, 160, 80, 0));
        szinek_base.Add(Color.FromArgb(255, 230, 113, 184));
        szinek_base.Add(Color.FromArgb(255, 240, 150, 9));
        szinek_base.Add(Color.FromArgb(255, 27, 161, 226));
        szinek_base.Add(Color.FromArgb(255, 229, 20, 0));
        szinek_base.Add(Color.FromArgb(255, 51, 153, 51));
        int remove;
        Color szin = new Color();
        Random generator = new Random();
        List<int> lapok = new List<int>();
        for (int l = 0; l < 16; l++)
        {
            lapok.Add(l);
        }

        for (int i = 0; i < 8; i++)
        {   
                szin = szinek_base[generator.Next(0, szinek_base.Count)]; 

                remove = lapok[generator.Next(0, lapok.Count)]; 
                szinek[remove] = szin;
                lapok.Remove(remove);
                szinek_base.Remove(szin);

                remove = lapok[generator.Next(0, lapok.Count)];
                szinek[remove] = szin;
                lapok.Remove(remove);
                szinek_base.Remove(szin);
        }
    }

使用try-catch我还发现第二个for()循环包含bug。 但是,如果我分成一半块并使用try-catch,它不会发现错误,也不会在第一部分 第二个。这个代码在Windows 7下工作正常,作为记忆游戏的一部分顺便说一句,我的想法。 感谢您的帮助,对不起语法错误和其他错误,我还不知道StackOverflow协议。

编辑:忘记提及,主命名空间包含它们:

public List<Color> szinek_base = new List<Color>();
Color[] szinek = new Color[8];

3 个答案:

答案 0 :(得分:4)

从评论中稍后修改:

szinek 它似乎是一个包含8个元素的数组,但 lapok 是16个元素的列表。

lapok.Count 传递给Random构造函数的第二个参数时,这意味着它可能会生成大于8的东西并且会引发 IndexOutOfRangeException

答案 1 :(得分:3)

修改

道歉,最初的答案是错误的。正如Adrian所强调的那样,抛出了异常,因为正在使用不正确的列表计数属性来突出显示可移除项目。

答案 2 :(得分:1)

请忽略我之前的回答。我找到了实际问题......

您可以根据随机变量设置删除,该随机变量可以介于0到16之间。

然后尝试从szinek中删除元素“remove”,这可能只有8号。