索引超出了数组的范围,没有错误,但代码不会运行 c#

Index was outside the bounds of the array, no errors but code won't run c#

提问人:ShadySpiritomb 提问时间:3/31/2022 更新时间:3/31/2022 访问量:1142

问:

我正在编写代码,将数据从多个文本文件添加到 c#、Windows 窗体的数据网格视图中,当我尝试打开运行此代码的窗体时,它会关闭并给我以下错误消息:System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

它还用黄色突出显示了这一行代码,字符串一词是蓝色的,我不知道这意味着什么。

                               string fullPupilRecord = pupilDetailsID[l] + "~" + pupilDetailsFirstName[l] + "~" + pupilDetailsSurname[l] + "~" + pupilDetailsClass[l]
                                + "~" + pupilDetailsNumber[l] + "~" + skiTime[i] + "~" + quizScore[j] + "~" + quizPercentage[j];

我不知道为什么会这样。所有变量都是使用字符串设置的,除了skiTime,它只是字符串。

            using (StreamWriter sw = new StreamWriter("groups.txt", false))
            {
                for (int i = 0; i < skiTimeID.Count; i++)
                {
                    for (int j = 0; j < quizID.Count; j++)
                    {
                        for (int l = 0; l < pupilDetailsID.Count; l++)
                        {
                            if (skiTimeID[i] == quizID[j] && quizID[j] == pupilDetailsID[l])
                            {
                                string fullPupilRecord = pupilDetailsID[l] + "~" + pupilDetailsFirstName[l] + "~" + pupilDetailsSurname[l] + "~" + pupilDetailsClass[l]
                                + "~" + pupilDetailsNumber[l] + "~" + skiTime[i] + "~" + quizScore[j] + "~" + quizPercentage[j];


                                int quizScoreNumber = Convert.ToInt32(quizScore[j]);
                                int skiTimeDecimal = Convert.ToInt32 (skiTime[i]);

                                if (quizScoreNumber >= 3 && skiTimeDecimal <= 40)
                                {
                                    groupLevel = "Advanced";
                                }

                                else if (quizScoreNumber >= 2 && skiTimeDecimal <= 50)
                                {
                                    groupLevel = "Intermediate";
                                }

                                else
                                {
                                    groupLevel = "Beginner";
                                }

                                fullPupilRecord = fullPupilRecord + "~" + groupLevel;
                                sw.WriteLine(fullPupilRecord);
                                fullPupilRecord = "";
                            }
                        }
                    }
                }
            }

这是什么意思,我该如何解决,请帮忙

C# 数组 字符串 WinForms 警告

评论


答:

0赞 Canadian_Pixel 3/31/2022 #1

当您使用循环数组中元素数的 for 循环时,就会出现问题。

由于数组索引从 0 开始,因此循环将尝试在不存在的索引上循环。

例如:你有一个只有一个元素的数组 -计数会说“1” 您的循环将尝试“skiTimeID[0] 和 skiTimeID[1]”

您可以通过两种方式修复它:

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

或 通过使用 for each 循环