您好 我正在创建在线测验。为此,我正在创建用户选择的答案数组。我使用了以下代码,它给出了正确的数组但有时会出错“索引超出范围”
//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 :(得分:1)
为什么要减少&#34;计数器&#34;一个人?
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;
这样你甚至不需要&#34; Counter&#34;部分会议。
答案 1 :(得分:0)
时可能会触发一个可能的 OutOfRange
**arrofans.length >= Counter**
答案 2 :(得分:0)
temp.Length不应该大于ansarray.Length,或者恰恰是你的代码中的ansarray.Length必须是temp.Length + 1或更大。为避免您的问题,您必须将其更改为(j = 0; j&lt; n&amp;&amp; j&lt;(ansarray.Length-1); j ++)但我不知道它是否适合您的情况