簡體   English   中英

C#在For循環中超出范圍

[英]C# Out of Range in For Loop

我正在運行此代碼,但是每次在for循環的第一行都會收到錯誤“發生類型為'System.ArgumentOutOfRangeException'的未處理的異常”。 它的基本代碼是多項選擇測驗問題,問題和答案存儲在2d數組中。

不幸的是,我似乎無法發現問題。 這可能是一個簡單的錯誤,但是我是個初學者,所以我很難發現它。

我已經閱讀了類似的問題,但是我不明白為什么這條線會引起問題。 我的列表中有4個元素,其中一個在循環之前被刪除,因此應該剩下3個。 我只循環3次,所以我不明白問題出在哪里。

希望有人能夠提供幫助,謝謝!

     Random rndq = new Random();
     Random rnda = new Random();
     List<int> answers = new List<int> { 1, 2, 3, 4 };

     int questionchoice = rndq.Next(0, questions.GetLength(0) - 1);
     int labelchoice = rnda.Next(0, answers.Count-1);
     lblQuestion.Text = questions[questionchoice, 0];
     var answer = (Label)Controls["lblAns" + answers[labelchoice]];
     answer.Text = questions[questionchoice, 1];

     answers.Remove(labelchoice);

     int j = 2;
     for (int i = 0; i < 3; i++)
     {
         var wronganswers = (Label)Controls["lblAns" + answers[i]];
         wronganswers.Text = questions[questionchoice, j];
         answers.RemoveAt(i);
         j++;
     }

每次循環時,您都將從列表中刪除一個項目。 第一次通過后,列表中就有3個項目[2, 3, 4] 下一遍還剩下兩個項目[2, 4] 然后,您嘗試從兩個列表中獲取第三個項目並獲得異常。

您需要在循環時不理會列表,或者確保您的循環條件實際上引用了列表的長度。 假設您要實際處理所有4個項目,建議您完全刪除RemoveAt調用。

或者,如果您實際上要刪除項目,請反轉循環的方向:

for (int i = answers.Count - 1; i >= 0; i--)
{
    // ....
    answers.RemoveAt(i);
}

這樣仍會處理列表中的所有項目,並且最后沒有任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM