2011-04-11 42 views
0

嗨 我正在創建在線測驗。爲此,我創建了由用戶選擇的答案數組。我用下面的代碼,它提供了正確的陣列,但有時會錯誤「索引的範圍之外」關於IndexOutOfRange錯誤asp.net c#

//rsel is session values for selected answer 
      int rsel = Convert.ToInt32(Session["rblsel"]); 
// [Convert.ToInt32(Session["Counter"] indicates size of array of no. of questions 
      int[] ansarray = new int[Convert.ToInt32(Session["Counter"]) - 1]; 

      int[] temp = (int[])Session["arrofans"]; 
      int j,n; 

       if (temp == null) 
        n = 0; 
       else 
        n = temp.Length; 
       for (j = 0; j < n; j++) 
       { 
       ansarray[j] = temp[j]; 
       } 
       ansarray[j] = rsel; 
       Session["arrofans"] = ansarray; 

幫我找出確切的錯誤。 Asp.net,c# 謝謝。

回答

0

一個可能OutOfRange可以當

**arrofans.length >= Counter** 
1

你爲什麼要由一個減少 「計數器」 被觸發?

int[] ansarray = new int[Convert.ToInt32(Session["Counter"]) - 1]; 

看起來大概應該是一個+ 1 ......但說實話這將是易於使用的ansarray規模 - 並使用Array.Resize有效延長它:

int[] ansarray = (int[])Session["arrofans"]; 
Array.Resize(ref ansarray, ansarray.Length + 1); 
ansarray[ansarray.Length - 1] = rsel; 
Session["arrofans"] = ansarray; 

那你甚至不需要會話的「Counter」部分。

+0

它不工作這裏 – Ishika 2011-04-11 07:06:02

+1

@ user701590:然後改變它以便它工作。如果這對你來說不夠詳細,請考慮給予我們更多有關它無法工作的細節。 – 2011-04-11 07:08:34

0

temp.Length不應該大於ansarray.Length,或者恰好來自你的代碼,它必須是ansarray.Length必須是temp.Length + 1或更大。爲避免你的問題,你必須將其更改爲(J = 0;Ĵ<ñ& &Ĵ<(ansarray.Length-1); J ++),但我不知道這是否會適合你的情況