关于IndexOutOfRange错误asp.net c#

时间:2011-04-11 06:43:06

标签: asp.net

您好 我正在创建在线测验。为此,我正在创建用户选择的答案数组。我使用了以下代码,它给出了正确的数组但有时会出错“索引超出范围”

    //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# 谢谢。

3 个答案:

答案 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 ++)但我不知道它是否适合您的情况